JDK监控和故障处理命令行工具(select home directory for jdk)

JDK监控和故障处理命令行工具(select home directory for jdk)

编码文章call10242025-07-16 13:47:195A+A-

当JVM发生故障的时候,能应用JDK命令行工具对JVM进行监控和故障诊断是Java开发人员必备的技能之一。本篇文章将为大家带来JVM进行监控和故障诊断常用的命令行工具,如下图:


其中jps、jstat、jinfo、jmap、jhat、jstack从JDK 1.5开始就已经存在,jcmd是在JDK 1.7引入的。

jps

格式:

jps [参数] [远程主机名,需要远程主机开通rmi远程调用,此参数为空表示本机]

参数如下图示:


示例:

jstat

格式:

jstat [参数] pid [间隔时间:单位毫秒] [统计次数]

参数如下图示:

示例:

使用jstat查看gc情况时,重点关注一下信息:

1、类的加载及卸载情况;

2、查看新生代、老生代及持久代的容量及使用情况;

3、查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间;

4、查看新生代中Eden区及Survior区中容量及分配情况等。

jinfo

格式:

jinfo [参数] pid

参数如下图示:

示例:

jmap

格式:

jmap [参数] pid

参数如下图示:

示例:

jhat

格式:

jhat [参数] [dumpfile:jmap生成的dump文件]

与jmap搭配使用,来分析jmap生成的堆转储快照。不过一般不建议使用此工具,dump文件的分析一般耗时又耗费资源,直接的在本机分析会严重影响性能,另外jhat分析结果相对简陋,所以一般都是将dump下载到另外的机器用jvisualvm进行分析以得到更为直观的分析结果。

jstack

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。所以jstatck一般用来定位线程出现长时间停顿的原因,如如线程间死锁、死循环等。

格式:

jstack [参数] pid

参数如下图示:

示例:

由于jstack输出的信息较多,所以上述示例是将线程快照打印到sample.txt文件中,然后下载sample.txt到本机进行分析,下图为sample.txt文件的部分内容:


分析线程快照时需要关注以下信息:

1、Deadlock:表示有死锁

2、Waiting on condition:等待某个资源或条件发生来唤醒自己

3、Blocked:表示线程阻塞

4、Waiting on monitor entry:在等待获取锁

jcmd

在JDK1.7以后,新增的一个多功能命令行工具,可以通过此命令发送诊断命令,从完成导出堆、查看Java进程、导出线程信息、执行GC、采样分析等功能;

格式:

jcmd <pid | main class> <command ... |PerfCounter.print | -f file>

jcmd的主要用途:

小结

以上为大家带来了常用的JDK监控和故障处理的命令行工具,重点是jstat,jmap和jstack三个命令行工具,jcmd是JDK1.7后才引入,它涵盖了jps,jinfo,jstat,jmap和jstack的部分功能,也可以花时间了解下。

后续我们还会带来更精彩的内容,感兴趣的同学可以关注我们的欢迎关注我们的同名微信公众号“麻辣软硬件”,与我们交流更多技术相关知识!

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4