Java故障排除,分析,监视和管理工具

Java故障排除,分析,监视和管理工具

jstack

查进程–>根据进程查线程–>看看哪个线程耗的CPU多。找到方法,即可。
jps -l可以查到服务的进程号。
jstack -l $pid

查看进程:top

查看进程内最耗费CPU的线程:top -Hp pid 或者ps -Lfp pid或者ps -mp pid -o THREAD, tid, time

ps -mq pid 指定的进程产生的线程数目


JMX

JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。
开启jmx:
无需验证的配置:

1
2
3
4
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=1234
-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false 去掉就是需要验证登录名和密码。
验证用户的配置文件在$java_home/jre/lib/management/jmxremote.password
默认有一个$java_home/jre/lib/management/jmxremote.password.template 修改下即可。
jmxremote.password.template默认是只读权限。
更改为可写的权限 chmod a+w jmxremote.password
修改后把jmxremote.password的读权限取消 a-r 。否则会提示:Error: Password file read access must be restricted:
management/jmxremote.access配置下权限。
连接时指定ip:端口和jmx连接即可。
远程的线程dump可以dump查看,堆的dump是需要从远程拉到本地来查看。


1
2
3
4
5
6
7
java 
-Djava.rmi.server.hostname=192.168.137.128
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
-jar sheep.jar 1>> sheep.stdout 2>> sheep.stderr&

主机名为ip地址

飞行记录: -XX:+UnlockCommercialFeatures -XX:+FlightRecorder

jvisualvm jmc