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