您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
本主題將討論網路工具、JVM 工具和診斷記錄,可用於排解 Apigee Edge 的網路和 JVM 相關問題。
TCP/IP 封包側錄器 (tcpdump) 公用程式
tcpdump 工具是指令列封包監聽工具,可擷取或篩選透過網路接收或傳輸的 TCP/IP 封包。適用於 Linux/Unix 作業系統。您可以使用 yum 安裝這項公用程式,如下所示:
yum install tcpdump
tcpdump 工具有助於排解網路或 SSL 相關問題。例如:
- 502 Bad Gateway 錯誤 (因 EOF 例外狀況而導致)
- 503 服務無法使用錯誤
- 安全資料傳輸層握手失敗
如要排解上述任何問題,請先找出發生錯誤的元件配對。如果是 Edge,則可以是下列任一配對:
- 用戶端應用程式和路由器
- 路由器和訊息處理器
- 訊息處理工具和後端伺服器
找出有問題的元件配對後,您可以在其中一個或兩個元件上使用 tcpdump 擷取網路封包。
使用 tcpdump 擷取傳送至/接收自特定主機的封包
使用下列 tcpdump 指令擷取傳送至或接收自指定主機 (IP 位址) 的所有封包,並將資訊儲存至指定檔案:
tcpdump -i any -s 0 host <IP address> -w <File name>
其中:
| 參數 | 說明 |
| -i | (介面) 指定應擷取封包的介面。使用「any」值可擷取所有介面的封包。 |
| -s | (snarf/snaplen) 會指定要擷取的每個封包量。使用值 0 (零) 可擷取整個封包。 |
| IP 位址 | 是要擷取封包的主機 IP 位址 |
| 檔案名稱 | 是 tcpdump 必須寫入的檔案名稱 |
範例
假設您想擷取訊息處理器和後端伺服器之間的封包:
- 登入訊息處理器電腦。
- 找出要擷取封包的後端伺服器 IP 位址 (假設為 22.22.22.22)。
使用下列指令擷取具有特定 IP 位址的主機網路封包:
tcpdump -i any -s 0 host 22.22.22.22 -w rmp-123.pcap
如果後端伺服器解析為多個 IP 位址,請在 tcpdump 指令中使用後端伺服器的主機名稱,如下所示:
tcpdump -i any -s 0 host <Hostname> -w rmp-123.pcap
如果有多個後端伺服器,且 IP 位址不同 (22.22.22.22、33.33.33.33 和 44.44.44.44),請使用下列 tcpdump 指令:
tcpdump -i any -s 0 host 22.22.22.22 or host 33.33.33.33 or host 44.44.44.44 -w rmp-123.pcap
分析 tcpdump
您可以使用 tcpdump 指令或以 GUI 為基礎的 Wireshark 工具,查看或分析 tcpdump。
參考資料
記憶體快照資料
記憶體快照資料是 Java 程序記憶體的快照。其中包含收集記憶體快照資料時,堆積中 Java 物件和類別的相關資訊。這些檔案通常相當大,大小從幾百 MB 到幾 GB 不等。
當 Java 程序 (例如 訊息處理器) 顯示下列情況時,記憶體快照資料 非常實用:
- 記憶體用量偏高
- OutofMemoryError
為 Java 程序產生記憶體快照資料
Java 提供名為 jmap 的公用程式,可讓您產生執行中 Java 程序的記憶體統計資料或堆積傾印。
使用下列 jmap 指令產生 Java 程序的記憶體快照資料:
sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=<filename> <pid>
其中:
| 參數 | 說明 |
| JAVA_HOME | Java 的安裝目錄 |
| filename | 這是要寫入記憶體快照資料的檔案名稱 |
| pid | 這是 Java 應用程式的程序 ID,必須擷取該應用程式的堆積傾印 |
範例
假設訊息處理器 mp-east 的記憶體用量偏高,或擲回 OutOfMemory 錯誤。在 Unix 作業系統上使用 ps 指令,判斷訊息處理器的程序 ID。假設是 24569。
執行下列 jmap 公用程式,產生記憶體快照資料:
sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=mp-east-heapdump.bin 24569
分析記憶體快照資料
您可以使用 Eclipse MAT (記憶體分析工具) 分析記憶體快照資料,判斷潛在的記憶體洩漏問題,或找出導致記憶體用量過高的 Java 物件。
參考資料
執行緒傾印
執行緒傾印檔是執行中 Java 程序所有執行緒狀態的快照,每個執行緒的狀態都會以堆疊內容 (稱為堆疊追蹤) 呈現。有些執行緒會是正在執行的 Java 應用程式的一部分,有些則會是 JVM 內部執行緒。
執行緒傾印會揭露應用程式各執行緒活動的相關資訊。 這項資訊對下列對象來說非常實用:
- 診斷 CPU 使用率飆升、回應時間緩慢或 Java 應用程式沒有回應等問題
- 最佳化應用程式和 JVM 效能
產生執行緒傾印
您可以使用 jstack 公用程式產生 Java 程序的執行緒傾印,如下所示:
sudo -u apigee <JAVA_HOME>/bin/jstack -l <pid> > <filename>
其中:
| 參數 | 說明 |
| JAVA_HOME | 這是 Java 的安裝目錄。 |
| pid | 這是要擷取執行緒傾印的 Java 應用程式的程序 ID。 |
| filename | 這是要寫入執行緒傾印的檔案名稱。 |
範例
如要在訊息處理器 mp-east 上為程序 ID 37320 產生執行緒傾印,請使用下列指令:
sudo -u apigee <JAVA_HOME>/bin/jstack -l 37320 > /opt/apigee/edge-message-processor/mp-east-threadDump.txt
如上例所示,程序的執行緒傾印會儲存至 /opt/apigee/edge-message-processor/mp-east-threadDump.txt 檔案。
分析執行緒傾印
您可以在任何文字編輯器 (例如 vi (Linux)、記事本 (Windows)) 中查看執行緒傾印。 如要瞭解執行緒傾印的不同部分,以及如何解讀資訊,請參閱「 執行緒傾印」。