VisualVM 是一款免费的性能分析工具。它通过 JvmStat、JMX、 SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它 能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。
核心技术是JMX,其中WebLogic和JBoss都是基于Jmx的。
1.进入JAVA_HOME/jre/lib/management 目录,修改jmxremote.password.template为jmxremote.password 并且给予修改权限 chmod 600 jmxremote.password
。
2.打开jmxremote.password 去掉 #monitorRole QED 和 # controlRole R&D 的注释,这里存放的时候JMX远程授权的用户名和密码,其中用户名monitorRole 密码QED的只能普通监控,没办法用抽样器进行cpu,内存抽样,而用户名为controlrole 是具有所有权限的。这个用户名密码表也可以自己指定,后续加入 -Dcom.sun.management.jmxremote.password.file=pwFilePath
。
3.在TOMCAT_HOME/bin目录的catalina.sh 第一行加入
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.0.23(jmx绑定远程主机ip) -Dcom.sun.management.jmxremote.port=18999(Jmx远程监听端口) -Dcom.sun.management.jmxremote.ssl=false(禁止使用ssl) -Dcom.sun.management.jmxremote.authenticate=false(不启用用户认证,启动则改为true)"
这些参数最终是传给JVM的,这里是为了方便。
附上JMX所有参数
参数 | 描述 |
---|---|
com.sun.management.jmxremote | true / false. Default is true |
com.sun.management.jmxremote.port | Port number. No default. |
com.sun.management.jmxremote.ssl | true / false. Default is true. |
com.sun.management.jmxremote.ssl.enabled.protocols | Default SSL/TLS protocol version. |
com.sun.management.jmxremote.ssl.enabled.cipher.suites | Default SSL/TLS cipher suites. |
com.sun.management.jmxremote.ssl.need.client.auth | true / false. Default is false |
com.sun.management.jmxremote.authenticate | true / false.Default is true |
com.sun.management.jmxremote.password.file | JRE_HOME/lib/management/jmxremote.password |
com.sun.management.jmxremote.access.file | JRE_HOME/lib/management/jmxremote.access |
com.sun.management.jmxremote.login.config | Default login configuration is a file-based password authentication |
4.重启tomcat,让配置生效。
1.文件->添加远程主机->点击高级设置->输入远程主机IP和端口号,调整好刷新时间
2.打开
这里可以看到JVM的启动参数,这里我还添加过远程调试的参数啦。
注意:远程连接生产JVM的时候,如果在Visual在分析期间崩溃掉,那么生产的JVM也会崩溃掉,因为设置此 JVM 启用类共享,这会导致在对应用程序进行性能分析时出现问题,甚至最终导致应用程序崩溃。请参见《VisualVM Troubleshooting Guide》(《VisualVM 故障排除指南》)
好啦,VisualVm调试之旅开始啦~~~