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 诊断工具

可以使用 AKS 插件上的 Java 诊断工具将 Java 诊断代理附加到在 Azure Kubernetes 服务 (AKS) 群集上的 Pod 容器中运行的 Java 应用程序。

附加代理后,它可以执行故障排除任务,例如在类函数周围添加日志。 可以使用此日志测试函数是否执行并计算函数中花费的总时间。 此分析可帮助查找应用程序中的性能瓶颈。

插件配置显示在“诊断 ”选项卡 上。在这里,您可以执行以下任务:

  • 配置转发到代理服务的本地端口。
  • 查看在本地环境中以 kubeconfig 列出的 Pod。
  • 选择 刷新 以刷新 Pod 表。 切换群集后,应刷新数据表以在新群集中加载 Pod。

IntelliJ IDEA 诊断选项卡的屏幕截图。

附加代理

Pod 容器应具有 /tmp 文件夹,并且它应具有对 /tmp 文件夹的写入权限。

若要在 JVM 中启用附加代理,请确保不要将 -XX:+DisableAttachMechanism 添加到 JVM 选项。

后端诊断服务器在 6 小时后关闭。

若要附加代理,请单击要将代理附加到的 Pod,然后选择容器。 只能将代理附加到 Pod 中的一个容器。 然后,等待附加过程完成。

IntelliJ IDEA 的屏幕截图,显示了“诊断”选项卡,其中“容器选择”对话框是打开状态。

设置活动 Pod 容器

成功附加代理后,可以使用它进行故障排除。

多个 Pod 可能已注入代理,因此必须设置一个活动 Pod。 在 IntelliJ IDEA 的诊断选项卡上,右键单击一个 Pod,然后选择选择为活动项

IntelliJ IDEA“诊断”选项卡的屏幕截图,其中选中了一个 Pod,并显示“选择为活动项”菜单项。

在类函数周围添加日志记录

配置后的日志会在 30 分钟后自动删除。

可以使用该工具在类函数周围添加日志记录,但不能添加接口、构造函数等。

若要将日志记录添加到函数,请在编辑器中右键单击该函数,然后选择 Java 诊断>添加 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

删除所有配置的日志

若要删除代理添加的所有日志,请选择 删除 All AroundLogs

注意

后端 Java 代理由 Pod 中的临时容器使用。 Pod 重启后,将删除代理。

故障 排除

尝试将代理附加到尚未启用该功能的节点上运行的 Pod 时,可能会发生超时。 可能会发生超时,因为节点必须首先检索代理映像,这会导致延迟。 发生这种情况时,可以选择 刷新 来检查代理是否已附加,也可以尝试再次附加代理。

如果附件失败,可以在临时容器中检查名为 diagnostic-container-<hashcode> 的日志。

可以在名为 diag4j-agent-service-<hashcode>的 Pod 容器的日志中找到有关插件操作的信息。

下一步

在 AKS 上使用 Java 诊断工具(diag4j)的 Spring Boot Admin 组件入门