診斷工具和記錄

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

本主題說明網路工具、JVM 工具和診斷記錄檔,您可以使用這些工具排解 Apigee Edge 上的網路和 JVM 相關問題。

TCP/IP 封包 sniffer (tcpdump) 公用程式

「tcpdump」tcpdump工具是一項指令列工具,可用於擷取或篩選透過網路接收或傳輸的 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 到數 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 物件導致記憶體用量偏高。

參考資料

如何收集記憶體快照資料

jmap 公用程式

jmap 手冊頁面

記憶體分析工具 (MAT)


執行緒傾印

執行緒傾印是執行中 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)、Notepad (Windows)。 如要進一步瞭解 Thread 傾印的部分及如何解讀資訊,請參閱 Thread 傾印相關說明。

參考資料