目录
前言
dump分析工具,真解决问题还是得靠这种强大的图形化界面hhh
这个之前写在印象笔记中,现在拿出来分享整理。
使用
将线程 jstack pid 出来之后,压缩一下成为zip 然后 上传上去
一般线程dump后都是人工去分析,Java线程Dump分析工具fastThread。
每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数。
Thread Dump 能诊断的问题
查找内存泄露,常见的是程序里load大量的数据到缓存;发现死锁线程。
Thread dumps 能帮助我们判断 CPU 峰值、死锁、内存异常、应用反应迟钝、响应时间变长和其他系统问题。一些在线的分析工具 也能帮助我们分析和定位问题,但是这些工具都要求有一个 dump 文件。
jstack
jstack 是一个抓取 thread dump 文件的有效的命令行工具,它位于 JDK 目录里的 bin 文件夹下(JDK_HOMEbin),以下是抓取 dump 文件的命令:
jstack -l >
比如:
jstack -l 6227 >6227.jstack
这个fastthread 倒是没有限制是txt还是.jstack
如果有异常会有提示:
类似:
这样就会出一个关于这个Thread Dump的全方面分析报告,方便你定位相关问题。
其中包括:
线程处于各种生命周期的总数;
状态百分比,有没有死锁的;
thread group :
这边的databus是我们的cas服务开的
gang worker是属于gc相关的
守护线程与非守护线程的比例
具有相同堆栈跟踪的线程:
(如果很多线程开始显示相同的堆栈跟踪,这可能是一个问题,了解RSI模式)
Identical Stack trace
CPU consuming threads
If application is consuming high CPU, investigate below threads. Learn Athlete pattern
阻塞线程-传递图(正常可能是 No transitive blocks found)
GC 线程(下面正常会提示normal)
是否有stackoverflow的错误
Complex DeadLocks
Dead Lock
Finalizer Thread
(If finalizer thread is BLOCKED or WAITING for a prolonged period, it can result in OutOfMemoryError, to learn more visit Leprechaun Trap pattern
)这个线程可能会导致内存溢出Finalize对象太多可能会导致线程阻塞,导致内存溢出。
Exception
Flame Graph
Bottom up Call Stack Tree
(All threads stacktrace are combined in to one single tree. Learn it's benefits.)