关于visualVM以及其他jvm性能监控工具使用的一些使用记录
visualVM远程连接jvm
- 添加JMX连接
关于jmx:JMX的全称为Java Management Extensions.
顾名思义,是管理Java的一种扩展。这种机制可以方便的管理、监控正在运行中的Java程序。常用于管理线程,内存,日志Level,服务重启,系统环境等
1:确保jvm启动时的参数
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=xxxx <- jmx连接时的端口 -Dcom.sun.management.jmxremote.ssl=false <- ssl安全连接,默认为是 -Dcom.sun.management.jmxremote.authenticate=false <- 不需要认证2:使用visualvm连接
先建立对应的远程连接,之后添加JMX连接 - 添加jstatd连接
1:修改$JAVA_HOME/jre/lib/security/java.policy中,在最后一行添加
permission java.security.AllPermission;2:启动jstatd服务
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=true -J-Djava.rmi.server.hostname=139.199.182.1963:添加jstatd连接,visualVM会自动连接
jconsole
查询jvm的cpu&内存
需要jvm启动时加入命令
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=xxxx <- jmx连接时的端口
-Dcom.sun.management.jmxremote.ssl=false <- ssl安全连接,默认为是
-Dcom.sun.management.jmxremote.authenticate=false <- 不需要认证
jstat
从左到右代表值:
第一个sur的容量,第二个sur的容量,第一个sur已使用空间,第二个sur已使用空间
eden容量,eden已使用空间,old代容量,old代已使用空间
方法区大小,方法区使用大小,压缩类空间大小,压缩类空间似乎用大小
年轻代gc次数,年轻代gc时间,old代gc次数,old代gc时间,gc总时间
jmap
jstack
实例:发现某个进程cpu过高,想找到对应的线程,打印线程栈
1:先查找对应的进程top
1:再通过top查找对应的线程top -H -p pid
2:通过jstack打印对应线程栈信息jstack pid
遇到的问题:
10555: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
