開始使用Java診斷代理程式

本文說明如何開始使用Java診斷代理程式。 它也描述 IntelliJ IDEA 的 AKS 外掛程式上的 Java 診斷工具。

Java診斷代理程式是用於針對 Java 程式進行疑難解答的 Java 代理程式。 它不需要重建、重新部署或重新啟動應用程式。 目前,它支援在 Java 類別中新增函式周圍的記錄。 呼叫 函式時,會列印記錄檔,並計算函式所耗用的總時間。

先決條件

建立端口轉發

使用下列命令來建立代理程式服務的埠轉送:

kubectl port-forward svc/diag4j-agent-service -n <namespace> <port>:8080

在適用於 IntelliJ IDEA 的 AKS 外掛程式上使用 Java 診斷工具

使用 Java Diagnostic Tool on AKS 外掛,將 Java 診斷代理程式附加到運行於 Azure Kubernetes Service (AKS) 叢集的 Pod 容器中的 Java 應用程式。

在你附加代理後,可以透過在類別函式周圍加入日誌來排除問題。 利用此日誌測試函式是否執行,並計算函式中所花費的總時間。 此分析可協助您找出應用程式中的效能瓶頸。

診斷標籤顯示插件設定。 在這裡,您可以:

  • 設定轉送至代理程式服務的本機埠。
  • 查看本機環境中 kubeconfig 所列出的 pod。
  • 選取 [刷新] 以重新整理 Pod 表格。 切換叢集後,重新整理表格,讓 pod 載入新叢集。

IntelliJ IDEA 診斷索引標籤的螢幕快照。

附加代理程式

Pod 容器必須有一個 /tmp 資料夾,並且必須有寫入 /tmp 資料夾的權限。

要啟用在 JVM 中附加代理,請不要在 JVM 選項中新增 -XX:+DisableAttachMechanism

後端診斷伺服器在 6 小時後關閉。

要連接代理人,先選擇你想連接代理人的艙體,然後選擇容器。 您只能將代理程式附加至 Pod 中的一個容器。 然後,等候附件程式完成。

IntelliJ IDEA 的螢幕快照,其中顯示 [診斷] 索引卷標,其中已開啟 [容器選取] 對話框。

設定作用中的Pod容器

成功連接代理後,再用它來排除故障。

多個 Pod 可能已注入代理程式,因此您必須選定一個作用中的 Pod。 在 IntelliJ IDEA 的 [診斷] 索引標籤上,以滑鼠右鍵按兩下 Pod,然後選取 [選取為作用中的 pod

IntelliJ IDEA 診斷標籤頁的螢幕快照,Pod 已被選取,並顯示 [設為作用中] 功能表項。

在類別函式周圍新增記錄

設定的記錄檔會在 30 分鐘後自動移除。

您可以使用 工具,在類別函式周圍新增記錄,但不能新增介面、建構函式等等。

要為函式新增日誌,請在編輯器中右鍵點擊該函式,然後選擇 Java Diagnostic>Add AroundLog,如下截圖所示。

IntelliJ IDEA 的螢幕快照,其中顯示對函式開啟的右鍵選單,並醒目提示 [新增 AroundLog] 選項。

在此範例中,新增記錄功能後,您可以呼叫 <host>/infor,查看函式呼叫之前和之後類似於以下範例的輸出結果:

===== START ===== Method: updateInformation Start Time: 2024-12-12T07:37:55.404107848Z
Done with the validation
Done with the DB access
Done with the data filtering
===== END ===== Method: updateInformation End Time: 2024-12-12T07:37:55.404316940Z Total Time: 0 milliseconds

拿掉所有已設定的記錄

要移除代理新增的所有日誌,請選擇 「移除所有日誌」。

注意

Pod 中的臨時容器會使用後端 Java 代理程式。 Pod 重新啟動之後,就會移除代理程式。

故障排除

當您嘗試將代理程式附加至在尚未啟用此功能的節點上執行的 pod 時,可能會發生逾時。 逾時發生是因為節點首先需要取得代理映像,這會造成延遲。 當出現此延遲時,選擇 重新整理 以檢查代理是否已連接,或嘗試重新連接代理。

如果附件失敗,請檢查臨時容器中命名 diagnostic-container-<hashcode> 的日誌。

您可以在名為 diag4j-agent-service-<hashcode>的 Pod 容器下的日誌中找到有關外掛程式運作的相關資訊。

下一步

開始使用 AKS 上的 Java 診斷工具 (diag4j) 的 Spring Boot 管理元件