Java 诊断代理入门
本文介绍如何开始使用 Java 诊断代理。 它还介绍了适用于 IntelliJ IDEA 的 AKS 插件上的 Java 诊断工具。
Java 诊断代理是用于对 Java 进程进行故障排除的 Java 代理。 它不需要重新生成、重新部署或重启应用程序。 目前,它支持在 Java 类中围绕函数添加日志。 调用函数时,将输出日志以及函数消耗的总时间的计算。
先决条件
在群集中安装 diag4j。
Java LTS 版本 11、17 或 21。
IntelliJ IDEA 插件,通过设置>插件>从磁盘安装插件在本地安装。
用于故障排除的 Java 应用程序。 有关详细信息,请参阅 将 Spring Boot 应用程序部署到 Azure Kubernetes 服务。
建立端口转发
使用以下命令建立代理服务的端口转发:
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。
附加代理
Pod 容器应具有 /tmp 文件夹,并且它应具有对 /tmp 文件夹的写入权限。
若要在 JVM 中启用附加代理,请确保不要将 -XX:+DisableAttachMechanism
添加到 JVM 选项。
后端诊断服务器在 6 小时后关闭。
若要附加代理,请单击要将代理附加到的 Pod,然后选择容器。 只能将代理附加到 Pod 中的一个容器。 然后,等待附加过程完成。
设置活动 Pod 容器
成功附加代理后,可以使用它进行故障排除。
多个 Pod 可能已注入代理,因此必须设置一个活动 Pod。 在 IntelliJ IDEA 的诊断选项卡上,右键单击一个 Pod,然后选择选择为活动项。
在类函数周围添加日志记录
配置后的日志会在 30 分钟后自动删除。
可以使用该工具在类函数周围添加日志记录,但不能添加接口、构造函数等。
若要将日志记录添加到函数,请在编辑器中右键单击该函数,然后选择 Java 诊断>添加 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 容器的日志中找到有关插件操作的信息。