診斷工具和記錄

查看 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 的檔案名稱

範例

假設您想要擷取訊息處理器與後端之間的封包 伺服器:

  1. 登入訊息處理器電腦。
  2. 決定後端伺服器的 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 物件造成高記憶體用量

參考資料

如何收集記憶體快照資料

jmap 公用程式

jmap 手冊頁面

記憶體分析工具 (MAT)


執行緒傾印

執行緒傾印檔是執行中 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 傾印不同部分,以及如何解讀 可能不準確或不適當

參考資料