查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
本主題將討論網路工具、JVM 工具和診斷記錄,方便您運用這些資訊 排解 Apigee Edge 上的網路和 JVM 相關問題。
TCP/IP 封包 sniffer (tcpdump) 公用程式
tcpdump 工具是指令列封包 sniffer 工具,可讓您 擷取或篩選透過網路接收或傳輸的 TCP/IP 封包。可用 支援 Linux/Unix 的作業系統您可以使用 yum 安裝這個公用程式, 如下:
yum install tcpdump
tcpdump 工具可用於疑難排解網路或 SSL 相關問題。例如:
- 502「閘道錯誤」錯誤 (因 EOF 例外狀況而造成)
- 503 服務無法使用錯誤
- SSL 握手失敗
如要排解上述問題,您必須先決定 發生錯誤之處。如果是 Edge,則可以是下列任一組合:
- 用戶端應用程式和路由器
- 路由器和訊息處理器
- 訊息處理器和後端伺服器
找出有問題的元件後,即可擷取網路封包 在其中一個或兩個元件上使用 tcpdump
使用 tcpdump 擷取來自特定主機收發的封包
請使用以下 tcpdump 指令,擷取伺服器傳送或接收的所有封包。 將資訊儲存在指定的主機 (IP 位址) 中:
tcpdump -i any -s 0 host <IP address> -w <File name>
在此情況下:
參數 | 說明 |
-i | (介面) 會指定要從哪個介面擷取封包。使用 「any」的值可讓系統從所有介面擷取封包。 |
秒 | (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 物件和類別相關資訊 收集。通常這種大小通常相當大,介於 100 MB 到幾毫秒之間 GBs。
在如訊息處理器這類 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 錯誤。使用 ps 指令決定訊息處理器的程序 ID Unix 作業系統。假設是 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 效能
產生 Thread 傾印
您可以使用 jstack 公用程式產生 Java 程序的執行緒傾印,如下所示 如下:
sudo -u apigee <JAVA_HOME>/bin/jstack -l <pid> > <filename>
在此情況下:
參數 | 說明 |
JAVA_HOME | 是 Java 的安裝目錄。 |
pid | 是您要擷取其執行緒傾印的 Java 應用程式程序 ID。 |
filename | 是要寫入執行緒傾印的檔案名稱。 |
範例
為訊息處理器中的程序 ID 37320 產生執行緒傾印檔 mp-east 來使用下列指令:
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)。 詳情請參閱 Thread 傾倒說明:進一步瞭解 Thread 傾印不同部分,以及如何解讀 可能不準確或不適當