java的jps(Java Virtual Machine Process Status Tool)命令主要用于查看系統中的java進程;jstack(Java Stack Trace)命令主要用于查看給定進程的堆棧信息。工作中使用jstack前經常要先使用jps。
jps
jps用于查看當前用戶所在操作系統上的java進程,參考1中對其基本使用已經做了詳盡的說明,這里做下補充。
只要你的操作系統在執行java程序,那么會在java.io.tmpdir
指定的目錄下,其實就是臨時文件夾,生成一個類似于hsperfdata_{User}的文件夾,里面每個文件都指代一個正在運行的java程序。當java程序運行結束時,其對應的臨時文件也會被刪除。jps命令不過是以命令的形式展示了正在運行的java程序詳情而已。
在windows操作系統下,臨時文件夾一般是C:\Users\{User}\AppData\Local\Temp\
。
上面的{User}指系統當前用戶名。
jstack
jstack用于生成java虛擬機當前時刻的線程快照,具體使用詳見參考2。線程快照是當前java虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的原因,如線程間死鎖、死循環、請求外部資源導致的長時間等待等。
線程出現停頓的時候通過jstack來查看各個線程的調用堆棧,就可以知道沒有響應的線程到底在后臺做什么事情,或者等待什么資源。
如果你想將jstack命令執行后輸出的內容寫入到指定的文件中,可以直接使jstack pid>goal.txt
,即將pid指示的java進程內的線程快照內容寫入到goal文件中,無關于平臺。