jstack 线程状态分析_面试官:说说你是怎么用JDK监控和故障处理工具的吧?例如jstack...

636aef944be6a07fe3191ed256bd1f5a.png

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

7e020c2029399a86c8ef788863e15054.png

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

jps

格式:

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

参数如下图示:

a9c655020b6dc676bab4126f1385b9c3.png

示例:

44d4f90cf157c88ddb9f68d557ba17c5.png

jstat

格式:

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

参数如下图示:

497ff31ea520ac8777f2828862b5ce39.png

示例:

f5487982411c4372f03a4d5a773f8ce3.png

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

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

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

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

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

jinfo

格式:

jinfo [参数] pid

参数如下图示:

092778bd509c96f9135d48f53900fed9.png

示例:

5c1d3689cbb315729d50cf44dd311640.png

jmap

格式:

jmap [参数] pid

参数如下图示:

6ac2735ea8e08f444dc42df95880e523.png

示例:

5453ccaf425eca85495fadca350b8ea0.png

jhat

格式:

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

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

jstack

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

格式:

jstack [参数] pid

参数如下图示:

ba4d13bf816fe5c4df42908131fce7f5.png

示例:

bde881d6d70afef3e0615d922e837229.png

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

26aaeca6023c72d5025e39d14aca5734.png

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

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的主要用途:

68f7d7e85cfb8e4669108e7c7dacee96.png

小结

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

这个是小编原来写的关于jstack的使用,介绍的超级详细

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值