📌  相关文章
📜  如何为运行在 Kubernetes 集群中的Java应用程序启用 JMX?

📅  最后修改于: 2022-05-13 01:54:42.301000             🧑  作者: Mango

如何为运行在 Kubernetes 集群中的Java应用程序启用 JMX?

很多时候,我们想要监控应用程序的 CPU 利用率、后台线程行为,以及最重要的是处理数据负载 (500MB – 1GB) 或更多数据的任务的内存消耗。此类监控有助于找出导致 CPU 或内存使用率过高的操作,并有助于找出内存泄漏问题或内存不足错误背后的原因。为了使我们的Java应用程序准备好进行分析,一种方法是为应用程序启用 JMX 端口并使用Java工具(如 JvisualVM、JConsole)监控其性能,这些工具是带有 JDK 的软件包,可以从安装了 jdk 的外部机器轻松使用。以下是手动启用 JMX 的指南以及配置jvisualvmjconsole的步骤。连接到这些监控工具并查看 CPU、内存、线程消耗是开始解决系统中任何与性能相关的问题的第一步。为了进一步分析,我们可能需要使用 Eclipse Memory Analyzer 等内存分析工具或在线免费工具来分析内存堆转储。一个问题是哪些类对象占用了太多空间,您可以更深入地研究系统代码来解决该问题。它可能是数据库模型或Java代码中的错误,这取决于问题和应用程序的类型。

以下是通过设置环境变量手动启用jmx的步骤

第 1 步:编辑my-app-deployment.yaml 。在容器的环境部分中,添加以下参数(相应地更改 NODE_NAME 并使用任何未使用的端口:9991)

如果要生成 Heap Dump 来分析内存相关的问题,例如“Out of Memory error”,请给出 JAVA_TOOL_OPTIONS 的值,如下所示:

并安装 /dumps 如下块:

(如果您不想挂载,请使用容器的现有文件夹,例如 /tmp 文件夹而不是 /dumps)

第 2 步:编辑 my-app-svc.yaml

添加类型:NodePort 并暴露 nodePort,参考下面的示例 my-app-svc.yaml

第 3 步:运行以下命令以重新启动 pod 和服务

重新启动可能需要一些时间。

第 4 步:运行以下命令并检查 9991 端口是否可用。

为您的应用程序启用 JMX 后,连接到任何性能分析工具以监控应用程序的 CPU、内存、线程使用情况。

运行 JConsole

  1. 运行 jconsole.exe
  2. 应出现 JConsole 窗口。
  3. 单击远程进程并输入以下值,将下面的主机名替换为您的主机名。
  4. 单击连接。选择不安全的连接。然后 jconsole 加载 CPU、内存、线程利用率所有与性能相关的指标:-

运行 JVisualVM

  1. 运行 jvisualvm.exe
  2. 右键单击远程并选择添加远程主机。
  3. 输入您的主机名。
  4. 主机现在应该出现在远程部分下。
  5. 右键单击新添加的主机并选择添加 JMX。
  6. 输入 : 进行连接,将主机名和端口替换为您的实际服务器。
  7. 选择不需要 SSL 连接。
  8. 单击确定。
  9. 完成此操作后,主机下方应出现一个新条目,选择它将提供远程配置文件概述。

您已准备好对部署在 Kubernetes 集群中的Java应用程序进行性能分析。