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

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

不难发现,t2比t1多了锁的信息,jstack -l 3696 ,-l就是在每个线程信息后打印锁相关信息。
当我们应用出现长时间等待时,可以用jstack去查看,比如线程死锁,死循环,远程请求长时间得不到返回,都可能出现线程长时间的等待,使用jstack可以看到每个线程的调用信息。
jhat: 用来分析jmap生成的堆dump,但是它能力比较弱,有一大堆可以代替它的工具,比如VisualVM,Eclipse Memory Analyzer等都比jhat强大,建议优先使用jhat的替代工具。java11:已废弃。
jcmd: 全称JVM Command,用于将诊断命令请求发送到正在运行的java虚拟机,从jdk7开始提供。
jcmd -l 查看正在运行的进程,和jps类似

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

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

jcmd 3696 GC.heap_dump -all myheapdump.hprof 相当于jmap dump 
jcmd 3696 GC.run : 调用java.lang.System.gc() 通知jvm做一次垃圾回收
jcmd 3696 Thread.print 打印所有带有堆栈跟踪的线程 和jstack类似

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

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

1053

被折叠的 条评论
为什么被折叠?



