JVM提供了几种常用的性能监控工具:
- JConsole:JDK自带的监控工具,可以实时监控内存、线程、类等信息,但是功能相对简单。
使用JConsole:
# 启动JConsole
jconsole
- VisualVM:也是JDK自带的强大监控工具,可以监控内存、线程、GC、JMX等各项信息,并提供实时图表显示。
使用VisualVM:
# 启动VisualVM
visualvm
- JProfiler:功能强大的第三方性能监控工具,需要商业授权。可以监控内存、线程、数据库、GC等信息,并提供代码级别的调用链路分析等高级功能。
使用JProfiler:
# 启动JProfiler
jprofiler
- Yourkit:也是功能强大的第三方性能监控工具,提供完整的监控能力和分析功能,需要商业授权。
使用Yourkit:
# 启动Yourkit
yourkit-2020.02.1/bin/yjp-controller.sh
除此之外,还有Arthas、BTrace等常用的开源监控工具。
这些工具通过JVM自带的JMX(Java Management Extensions)技术来获取运行时数据,并以简洁直观的UI展现给用户,方便开发者分析程序的性能问题和系统瓶颈。
来看一个简单例子:
我们可以使用JConsole查看一个Java进程的内存使用情况:
- 启动Java进程,开放JMX端口(默认为9999)
java -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false Sample
- 启动JConsole,输入URL service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi 连接进程
- 在JConsole界面可视化观察内存的实时变化情况,包括堆内存(Heap)、非堆内存(Non-Heap)的使用和变化趋势。
这样,我们可以很直观地观察到内存的变化情况,如果存在内存溢出等问题也能够很容易发现。这就是JVM性能监控工具的威力所在。