jvm调试工具(2)

jstack:打印当前虚拟机的线程快照(线程快照也叫Thread Dump或者javacore文件)。

jstack 3696 打印线程栈信息

4661a17992316d04eb9b7a8ae9e7d245.png

 

分别比较t1,t2,t3文件,但是jstack -l -e 3696 > t3.txt ,-e已不存在 所以我们只来看t1,t2文件好了

d91e640f73e4cfb26f3f0ec93469b4eb.png

 不难发现,t2比t1多了锁的信息,jstack -l  3696 ,-l就是在每个线程信息后打印锁相关信息。7d251aa53b0eba19368c5768d49a1b5d.png

当我们应用出现长时间等待时,可以用jstack去查看,比如线程死锁,死循环,远程请求长时间得不到返回,都可能出现线程长时间的等待,使用jstack可以看到每个线程的调用信息。

jhat: 用来分析jmap生成的堆dump,但是它能力比较弱,有一大堆可以代替它的工具,比如VisualVM,Eclipse Memory Analyzer等都比jhat强大,建议优先使用jhat的替代工具。java11:已废弃。

jcmd: 全称JVM Command,用于将诊断命令请求发送到正在运行的java虚拟机,从jdk7开始提供。

jcmd -l   查看正在运行的进程,和jps类似

93990451a3d710eaf0ecf7a2f478849c.png

 jcmd 3696 PerfCounter.print  查看该进程的性能计数器

3cc4e8dd68c021ab1bd97154b0a9d757.png

 jcmd com.example.threadtest.create.Test  PerfCounter.print    将进程号换成启动类,也可以获取该进程的性能计数器

4eb76180e370697f31464d4bb207f3f9.png

 jcmd 3696 GC.heap_dump -all myheapdump.hprof   相当于jmap dump 3dcf6e605a97a80cc039168f5624256c.png

  jcmd 3696 GC.run :   调用java.lang.System.gc()  通知jvm做一次垃圾回收

  jcmd 3696 Thread.print     打印所有带有堆栈跟踪的线程  和jstack类似

ed491b4966c747b704a806fc07a61018.png

   jcmd 3696 Thread.print  -l    额外打印java.util.concurrent 锁的信息

52405225be24aaa3e75d8ae8f16930a2.png

 jhsdb:  全称Java Hotspot Debugger,Hotspot进程调试器,可用于从崩溃的JVM附加到Java进程或核心转储。  java8:无,java9才正式引入  但jdk8还是可以用的,需要启动JAVA_HOME/lib/sa-jdi.jar

 851926844834c3b90a4bc2157ef592e6.png

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@所谓伊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值