Java——命令jps、jstat、jmap、jstack、jhat、jinfo
JAVA_HOME/bin/
目錄下jdk提供了很多自帶工具,下面以tomcat下的web專案為例。如果感覺輸出內容太多可以使用 xxx | head -n 20
顯示輸出內容的頭20行。
jps
jps:顯示當前使用者的所有java程式的PID
jps -help
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
-m
輸出傳遞給main 方法的引數,在嵌入式jvm上可能是null,tomcat下的web專案為例
14002 Jps -m
21206 Bootstrap start
-l
輸出應用程式main class的完整package名 或者 應用程式的jar檔案完整路徑名
21206 org.apache.catalina.startup.Bootstrap
14062 sun.tools.jps.Jps
-v
輸出傳遞給JVM的引數,要顯示其他使用者的還是隻能用unix/linux的 ps
命令。
jps
僅查詢當前使用者的Java程式,而不是當前系統中的所有程式。
jstat
jstat
(JVM Statistics Monitoring Tool)是用於監控虛擬機器各種執行狀態資訊的命令列工具。他可以顯示本地或遠端虛擬機器程式中的類裝載、記憶體、垃圾收集、JIT編譯等執行資料。包括了對Heap size和使用請看,垃圾回收狀況的監控。
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
jstat -gc 21206 250 20 //查詢程式pid 21206的垃圾收集情況,每250毫秒查詢一次,一共查詢20次。
jstat -gccause pid //額外輸出上次GC原因
jstat -calss pid //類裝載、類解除安裝、總空間以及所消耗的時間
jstat –gcnew pid //監視新生代GC的狀況
jstat –gcold pid //監視老年代GC的狀況
-gc
中的引數
S0C 年輕代中第一個survivor(倖存區)的容量 (位元組) S1C 年輕代中第二個survivor(倖存區)的容量 (位元組) S0U 年輕代中第一個survivor(倖存區)目前已使用空間 (位元組) S1U 年輕代中第二個survivor(倖存區)目前已使用空間 (位元組) EC 年輕代中Eden(伊甸園)的容量 (位元組) EU 年輕代中Eden(伊甸園)目前已使用空間 (位元組) OC Old代的容量 (位元組) OU Old代目前已使用空間 (位元組) PC Perm(持久代)的容量 (位元組) PU Perm(持久代)目前已使用空間 (位元組) YGC 從應用程式啟動到取樣時年輕代中gc次數 YGCT 從應用程式啟動到取樣時年輕代中gc所用時間(s) FGC 從應用程式啟動到取樣時old代(全gc)gc次數 FGCT 從應用程式啟動到取樣時old代(全gc)gc所用時間(s) GCT 從應用程式啟動到取樣時gc用的總時間(s)
jmap
生成堆轉儲快照(heap dump)
列印指定Java程式(或核心檔案、遠端除錯伺服器)的共享物件記憶體對映或堆記憶體細節。
堆Dump是反應Java堆使用情況的記憶體映象,其中主要包括系統資訊、虛擬機器屬性、完整的執行緒Dump、所有類和物件的狀態等。 一般,在記憶體不足(OOM)、GC異常等情況下,我們就會懷疑有記憶體洩露。這個時候我們就可以製作堆Dump來檢視具體情況,分析原因。
常用指令
jmap -heap pid //檢視java 堆(heap)使用情況和堆記憶體的初始化值(易讀,清晰)
jmap -histo pid //檢視堆記憶體(histogram)中的物件數量及大小 (實用)
jmap -histo:live pid //JVM會先觸發gc,然後再統計資訊 (gc後物件一下少了一半)
jmap -dump:format=b,file=heapDump pid //將記憶體使用的詳細情況輸出到檔案,之後一般使用其他工具進行分析。
jstack
生成當前時刻的執行緒快照。
生成執行緒快照的主要目的是定位執行緒出現長時間停頓的原因,如執行緒間死鎖、死迴圈、請求外部資源導致的長時間等待等。
jstack
命令主要用來檢視Java執行緒的呼叫堆疊的,可以用來分析執行緒問題(如死鎖)。
常用指令
jstack pid //檢視執行緒情況
jstack -F pid //正常輸出不被響應時,使用該指令
jstack -l pid //除堆疊外,顯示關於鎖的附件資訊
wait on monitor entry: 被阻塞的,肯定有問題
runnable : 注意IO執行緒
in Object.wait(): 注意非執行緒池等待
jhat
jhat:(Java Heap Analysis Tool)是一個用來分析java的堆情況的命令。使用jmap
可以生成Java堆的Dump檔案。生成dump檔案之後就可以用jhat
命令,將dump檔案轉成html的形式,然後通過http訪問可以檢視堆情況。
jinfo
jinfo
可以輸出java程式、core檔案或遠端debug伺服器的配置資訊。
常見問題
頻繁GC問題或記憶體溢位問題
一、使用jps
檢視執行緒ID
二、使用jstat -gc 3331 250 20
檢視gc情況,一般比較關注PERM區的情況,檢視GC的增長情況。
三、使用jstat -gccause
額外輸出上次GC原因
四、使用jmap -dump:format=b,file=heapDump 3331
生成堆轉儲檔案
五、使用jhat或者視覺化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情況。
六、結合程式碼解決記憶體溢位或洩露問題。
死鎖問題
一、使用jps
檢視執行緒ID
二、使用jstack pid
檢視執行緒情況
OutOfMemery如何處理
首先線上應用的jvm配置要養成良好的習慣,增加一下配置則可以在jvm發生 oom的時候自動dump日誌了 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/log/dump/jvm-oom.log
總結
1.如果程式記憶體不足或者頻繁GC,很有可能存在記憶體洩露情況,這時候就要藉助Java堆Dump檢視物件的情況。
2.要製作堆Dump可以直接使用jvm自帶的jmap命令
3.可以先使用jmap -heap
命令檢視堆的使用情況,看一下各個堆空間的佔用情況。
參考資料
相關文章
- jvm系列(四):jvm調優-命令大全(jps jstat jmap jhat jstack jinfo)JVMJS
- Java命令列監控工具(jmap,jstack,jstat,jinfo,jps)Java命令列JS
- JVM監控工具:jps、jstat、jinfo、jmap、jhat、jJVMJS
- java虛擬機器記憶體監控工具jps,jinfo,Jstack,jstat,jmap,jhat使用Java虛擬機記憶體JS
- Java命令列監控工具(jmap,jstack,jstat,jinfoJava命令列JS
- JVM效能調優監控工具——jps、jstack、jmap、jhat、jstat、hprof使用詳解JVMJS
- JDK幾個很實用的工具 jps、jinfo、jstat、jstack、jmap、jconsoleJDKJS
- jstack, jstat, jmap, jinfo, 教你如何在背後偷窺你的程式^^JS
- (轉)JVM調優常用命令(jstat、jmap、jstack)JVMJS
- JMap與JStackJS
- [轉載]JDK自帶VM分析工具jps,jstat,jmap,jconsoleJDKJS
- 使用JDK工具jmap和jhat監控Java程式JDKJava
- jstack和jmap1JS
- java命令--jmap命令使用Java
- Java JDK目錄下的jmap和jhat工具的使用方式JavaJDK
- jps、jmap、jstack已經Out了,使用jcmd進行JVM效能和記憶體跟蹤微調 -DZone JavaJSJVM記憶體Java
- Java的jinfo命令使用詳解Java
- Java的jmap命令使用詳解Java
- 必知必會Java命令-jpsJava
- Java的jstat命令使用詳解JavaJS
- jstat命令JS
- Java的jstack命令使用詳解JavaJS
- 使用JDK自帶的jmap和jhat監控處於執行狀態的Java程式JDKJava
- JPS 命令詳細解釋
- 效能調優命令之jstackJS
- Linux jstack命令詳解LinuxJS
- 使用 jstat 命令檢視 JVM 的GC資訊JSJVMGC
- 記一次jstack命令定位問題JS
- JPS/JPS+ 尋路演算法演算法
- Hadoop之JPS命令及真假現象(process information unavailable)HadoopORMAI
- jstat命令檢視jvm的GC情況 (以Linux為例)JSJVMGCLinux
- 效能調優 jstackJS
- jmap檢視java程式佔用的資料庫連線數Java資料庫
- 透過jstack檢視java執行緒在忙什麼JSJava執行緒
- jmap -dump:format=b,file=java_pid_04180.hprof pidORMJava
- 使用jstack檢測Java應用的死鎖(deadlock)狀態JSJava
- jps報27342 -- process information unavailableORMAI
- jstack判斷執行緒狀態JS執行緒