概述
本文将介绍如何使用VisualVM和Java Management Extensions (JMX) 远程监控Java应用程序。
2. JMX
JMX 是 一种标准API,用于管理与监控JVM应用。JVM内置了JMX可以利用的监控工具。因此,我们通常称这些工具为“开箱即用的管理工具”,或者在这种情况下,称为“JMX代理”。
3. VisualVM
VisualVM 是一个提供轻量级JVM性能分析功能的可视工具。市面上还有很多主流的性能分析器。然而,VisualVM是免费的,并且在JDK 6U7及早期更新版本中作为JDK的一部分提供。对于其他版本,Java VisualVM 可以作为独立的应用程序获取。
VisualVM 允许我们连接到本地和远程的JVM应用程序进行监控。
当在任何机器上启动时,它会自动发现并开始监控所有本地运行的JVM应用程序。然而,我们需要明确地连接到远程应用程序。
3.1. JVM连接模式
JVM通过工具如*jstatd* 或 JMX 提供自我监控的接口。这些工具反过来又为像VisualVM这样的工具提供了获取性能数据的API。
jstatd 程序是JDK附带的守护进程,但其功能有限。例如,我们无法监控CPU使用率,也无法生成线程快照。
另一方面,JMX技术不需要在JVM上运行任何守护进程。此外,它可以用来监控本地和远程的JVM应用程序。然而,我们需要以特殊方式启动JVM来启用开箱即用的监控功能。在这篇文章中,我们将重点放在JMX模式上。
3.2. 启动
正如我们之前看到的,我们的JDK版本可能包含VisualVM,也可能不包含。无论哪种情况,我们都可以通过执行适当的二进制文件来启动它:
./jvisualvm
如果该二进制文件位于$JAVA_HOME/bin
文件夹中,上述命令将打开VisualVM界面,如果单独安装,它可能会位于不同的文件夹中。
VisualVM默认会启动并加载所有本地运行的Java应用程序:
3.3. 功能
VisualVM提供了许多有用的功能:
- 展示本地和远程Java应用程序进程
- 以CPU使用率、垃圾回收活动、已加载类数量等指标监控进程性能
- 可视化所有进程中的线程及其在不同状态(如睡眠和等待)下的时间
- 生成和显示线程快照,立即深入了解被监控进程的状态
VisualVM功能页面链接列出了更全面的可用功能。像所有精心设计的软件一样,VisualVM可以通过安装第三方插件扩展,以访问更高级和独特的功能。
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 正在运行,我们可以开始我们的远程监控会话。
在左侧面板上右键单击,然后选择添加JMX连接:
在弹出对话框的“连接”字段中输入主机:端口组合,然后点击确定。
如果成功,现在我们可以通过从左侧面板双击新连接来查看监控窗口:
5. 总结
本文介绍了如何使用VisualVM和JMX进行Java应用程序的远程监控。