VisualVM是JDK自带的免费的,集成了多个JDK命令行工具的可视化工具,为Java应用程序做性能分析及调优
VisualVM通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。
性能分析的主要方式
监视
转储
系统转储
Java转储
堆转储
快照
CPU快照
内存快照
性能分析
CPU性能分析
内存性能分析
线程性能分析
VisualVM 安装
JDK 6 Update7以后, VisualVM已作为OracleJDK的一部分。
而官网也可以下载安装。但它本身需要JDK6以上版本运行,可以监控JDK1.4以上版本的应用程序。
官网地址:
http://visualvm.java.net/
安装插件
通过菜单里的插件管理器,或到插件中心手工下载、离线安装。
插件中心网址:
http://visualvm.java.net/pluginscenters.html
功能
内存分析
堆内存分析图示例
永久保留区域使用情况
在Applications程序上,点击右键“当出现OOME 时生成堆Dump”功能,当程序出现OutOfMemory例外时,VisualVM将自动生成一个堆转储。
内存评估示例
CPU使用情况
线程分析
VisualVM提供了三种视图的线程分析,默认以时间线的方式展现。
快照功能
- 应用程序快照
- Profiler快照
* 转储功能*
- 线程转储
- 堆转储
两个堆转储文件可以进行比较。
运行jar启用rmx
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=7777 -jar myjar.jar
在Java VisualVM 添加远程RMX主机,添加远程主机IP:7777即可。
其它问题
另外,需要远程监控时,要浏览host里hostname绑定的网卡。
可以使用
hostname -i
查看对应的IP地址。运行Java VisualVM的主机要能够访问到该 IP。
如果显示的是私网IP,外网无法访问,则可以修改host文件,或设置端口转发。
防火墙问题
除了JMX server指定的监听端口号外,JMXserver还会监听一到两个随机端口号,
可以通过命令:
lsof -i|grep java |grep <pid>
来查看当前java进程需要监听的随机端口号,要把这些随机端口也在防火墙放行。
如果监控Tomcat,可以使用附加组件。