java程序性能分析之thread dump和heap dump
一、【内存dump】
jmap –dump:live,format=b,file=heap.bin <pid>
二、【线程dump】
jstack是java虚拟机自带的一种堆栈跟踪工具。
基本介绍:
jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。
命令格式:
jstack [ option ] pid
基本参数:
-F 当’jstack [-l] pid’没有相应的时候强制打印栈信息
-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m 打印java和native c/c++框架的所有栈信息. -h | -help打印帮助信息
如果程序正常运行: jstack [-l] pid > xxx.log 将线程信息输入到指定文件中
如果程序无响应: jstack -F [-m] [-l] pid >xxx.log 强制打印栈信息
top -H -p pid 找出占用cpu高(或执行时间长)的线程pid