使用VisualVM和JMX进行远程监控

2025/04/02

1. 概述

在本文中,我们将学习如何使用VisualVM和Java Management Extensions(JMX)来远程监控Java应用程序。

2. JMX

JMX是用于管理和监视JVM应用程序的标准API,JVM具有JMX可用于此目的的内置工具。因此,我们通常将这些实用程序称为“开箱即用的管理工具”,或者在本例中称为“JMX代理”。

3. VisualVM

VisualVM是一种可视化工具,可为JVM提供轻量级分析功能。还有许多其他主流分析工具,但是,VisualVM是免费的,并且与JDK 6U7版本捆绑在一起,直到JDK 8的早期更新。对于其他版本,Java VisualVM可作为独立应用程序使用。

VisualVM允许我们连接到本地和远程JVM应用程序以进行监控

当在任何机器上启动时,它会自动发现并开始监视本地运行的所有JVM应用程序。但是,我们需要显式连接远程应用程序。

3.1 JVM连接模式

JVM通过jstatdJMX等工具将自身暴露给监控者,这些工具反过来为VisualVM等工具提供API以获取分析数据。

jstatd程序是一个与JDK捆绑在一起的守护进程,但是,它的功能有限。例如,我们无法监控CPU使用率,也无法进行线程转储。

另一方面,JMX技术不需要在JVM上运行任何守护进程。此外,它可用于分析本地和远程JVM应用程序。但是,我们确实需要使用特殊属性启动JVM以启用开箱即用的监控功能。在本文中,我们将只关注JMX模式。

3.2 启动

正如我们之前看到的,我们的JDK版本可能与VisualVM捆绑在一起,也可能不与VisualVM捆绑在一起。无论哪种情况,我们都可以通过执行适当的二进制文件来启动它:

./jvisualvm

如果二进制文件存在于$JAVA_HOME/bin文件夹中,则上述命令将打开VisualVM界面,如果单独安装,它可能位于不同的文件夹中。

默认情况下,VisualVM将启动并加载所有在本地运行的Java应用程序:

3.3 功能

VisualVM提供了几个有用的功能:

  • 显示本地和远程Java应用程序进程
  • 监控CPU使用率、GC活动、已加载类的数量和其他指标方面的进程性能
  • 可视化所有进程中的线程以及它们处于不同状态(例如睡眠和等待)的时间
  • 获取并显示线程转储,以便立即了解被监控进程中发生的情况

VisualVM功能页面有一个更全面的可用功能列表。与所有设计良好的软件一样,VisualVM可以通过安装Plugins选项卡上可用的第三方插件来扩展以访问更高级和独特的功能。

4. 远程监控

在本节中,我们将演示如何使用VisualVM和JMX远程监控Java应用程序,我们还将有机会探索所有必要的配置和JVM启动选项。

4.1 应用程序配置

我们使用启动脚本启动大多数Java应用程序,在此脚本中,启动命令通常将基本参数传递给JVM以指定应用程序的需求,例如最大和最小内存要求。

假设我们有一个打包为MyApp.jar的应用程序,让我们看一个包含主要JMX配置参数的示例启动命令:

java -Dcom.sun.management.jmxremote.port=8080 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false
-Xms1024m -Xmx1024m -jar MyApp.jar

在上面的命令中,MyApp.jar通过端口8080配置的开箱即用的监控功能启动。此外,为简单起见,我们停用了SSL加密和密码身份验证。

在生产环境中,理想情况下,我们应该在公共网络中保护VisualVM和JVM应用程序之间的通信。

4.2 VisualVM配置

现在我们已经在本地运行了VisualVM并且在远程服务器上运行了MyApp.jar,我们可以开始远程监控会话了。

右键单击左侧面板并选择“Add JMX Connection”:

在出现的对话框的“Connection”字段中输入host:port组合,然后单击“OK”。

如果成功,我们现在应该能够通过双击左侧面板中的新连接来看到监控窗口:

5. 总结

在本文中,我们探讨了使用VisualVM和JMX对Java应用程序进行远程监控。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章