主要使用了jps和jstack命令及procexp.exe工具
Jps常用命令整理
Jps(Java Virtual MachineProcess Status Tool)是JDK 1.5提供的一個顯示當前所有Java進程pid命令
1、 jps :列出pid和Java主類名
2、 jps -l:列出pid和Java主類全稱
3、 jps -lm:列出PID、主類全稱和應用程序參數
4、 jps –v:列出pid和JVM參數
JStack常用命令整理
Jstack是Java虛擬機自帶的一種堆棧跟蹤工具。Jstack用於打印出給定的Java進程ID或core file或遠程調試服務的Java堆棧信息,如果是在64位機器上,需要指定選項」-J-d64」,Windows的jstack使用方式只支持以下的這種方式
Jstack [–l] pid
主要分爲兩個功能:
a. 針對活着的進程做本地的或遠程的線程dump;
b. 針對core文件做線程dump。
jstack用於生成java虛擬機當前時刻的線程快照。線程快照是當前java虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的原因,如線程間死鎖、死循環、請求外部資源導致的長時間等待等。線程出現停頓的時候通過jstack來查看各個線程的調用堆棧,就可以知道沒有響應的線程到底在後臺做什麼事情,或者等待什麼資源。如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕鬆地知道java程序是如何崩潰和在程序何處發生問題。另外,jstack工具還可以附屬到正在運行的java程序中,看到當時運行的java程序的javastack和native stack的信息, 如果現在運行的java程序呈現hung的狀態,jstack是非常有用的。
想要通過jstack命令來分析線程的情況的話,首先要知道線程都有哪些狀態,下面這些狀態是我們使用jstack命令查看線程堆棧信息時可能會看到的線程的幾種狀態:
NEW,未啓動的。不會出現在Dump中。
RUNNABLE,在虛擬機內執行的。運行中狀態,可能裏面還能看到locked字樣,表明它獲得了某把鎖。
BLOCKED,受阻塞並等待監視器鎖。被某個鎖(synchronizers)給block住了。
WATING,無限期等待另一個線程執行特定操作。等待某個condition或monitor發生,一般停留在park(), wait(), sleep(),join() 等語句裏。
TIMED_WATING,有時限的等待另一個線程的特定操作。和WAITING的區別是wait() 等語句加上了時間限制 wait(timeout)。
TERMINATED,已退出的。
Procexp.exe工具
ProcessExplorer(procexp)是一款進程監視工具,網上百度吧。
其他的不說了:
案例:執行,死循環
第一步:怎樣找到進程ID(PID),PID爲13616
第二步:怎樣用jstack輸出線程快照日誌,存放到d盤的log.txt
第三步:怎樣用procexp.exe工具快速定位線程ID,並跟蹤,切換十進制轉換成十六進制
第四步:打開log.txt文件,搜索1A60,跟舉例的代碼對應上
ok,完事了。