診斷工具和記錄

您目前查看的是 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 必須寫入的檔案名稱

範例

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

  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 物件和類別的相關資訊。這些檔案通常相當大,大小從幾百 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)、記事本 (Windows)) 中查看執行緒傾印。 如要瞭解執行緒傾印的不同部分,以及如何解讀資訊,請參閱「 執行緒傾印」。

參考資料