標籤:示範 方法 名稱 現在 服務 應用程式 was 佔用 tail
熟悉java的人都知道jdk的bin目錄中有很多小工具,其中就包括用於監視虛擬機器和故障處理的工具,今天就來仔細瞭解下各個工具的用法
jps
JVM Process Status Tool,用於顯示指定系統的內所有的Hotapot的虛擬機器進程
1.用法
jps [options] [hostid]
2.參數列表
q:只輸出LVMID,省略主類的名稱m:輸出虛擬機器進程啟動時傳遞給主類main()函數的參數l:輸出主類的全名。若進程執行的是jar包,則輸出jar路徑v:輸出虛擬機器進程啟動時JVM參數
3.實際舉例:
1. jps -q :只輸出LVMID,省略主類的名稱
2. jps -m:輸出虛擬機器進程啟動時傳遞給主類main()函數的參數
3.jps -l:輸出主類的全名。若進程執行的是jar包,則輸出jar路徑
4.jps -v:輸出虛擬機器進程啟動時JVM參數
5.參數 vl一起:這樣我們就能很方便的查看各個程式設定的參數了
jstat
Java Statisstic Monitoring Tool :一個極強的監視VM記憶體工具。可以用來監視VM記憶體內的各種堆和非堆的大小及其記憶體使用量量
1.用法
jstat [Options] vmid [interval] [count]
Options,選項,我們一般使用 -gcutil 查看gc情況
vmid,VM的進程號,即當前啟動並執行java進程號
interval,間隔時間,單位為秒或者毫秒
count,列印次數,如果預設則列印無數次
2.參數列表
jstat -class pid:顯示載入class的數量,及所佔空間等資訊。 jstat -compiler pid:顯示VMJust-In-Time 編譯的數量等資訊。 jstat -gc pid:可以顯示gc的資訊,查看gc的次數,及時間。其中最後五項,分別是young gc的次數,young gc的時間,full gc的次數,full gc的時間,gc的總時間。 jstat -gccapacity:可以顯示,VM記憶體中三代(young,old,perm)對象的使用和佔用大小,如:PGCMN顯示的是最小perm的記憶體使用量量,PGCMX顯示的是perm的記憶體最大使用量,PGC是當前新產生的perm記憶體佔用量,PC是但前perm記憶體佔用量。其他的可以根據這個類推, OC是old內純的佔用量。 jstat -gcnew pid:new對象的資訊。 jstat -gcnewcapacity pid:new對象的資訊及其佔用量。 jstat -gcold pid:old對象的資訊。 jstat -gcoldcapacity pid:old對象的資訊及其佔用量。 jstat -gcpermcapacity pid: perm對象的資訊及其佔用量。 jstat -util pid:統計gc資訊統計。 jstat -printcompilation pid:當前VM執行的資訊。 除了以上一個參數外,還可以同時加上 兩個數字,如:jstat -printcompilation 3024 250 6是每250毫秒列印一次,一共列印6次,還可以加上-h3每三行顯示一下標題。
3.實際舉例
1. -gc:監視java堆狀況
S0C:年輕代中第一個survivor(倖存區)的容量 (位元組) S1C:年輕代中第二個survivor(倖存區)的容量 (位元組) S0U:年輕代中第一個survivor(倖存區)目前已使用空間 (位元組) S1U:年輕代中第二個survivor(倖存區)目前已使用空間 (位元組) EC:年輕代中Eden的容量 (位元組) EU:年輕代中Eden目前已使用空間 (位元組) OC:Old代的容量 (位元組) OU:Old代目前已使用空間 (位元組) PC:Perm(持久代)的容量 (位元組) PU:Perm(持久代)目前已使用空間 (位元組) YGC:從應用程式啟動到採樣時年輕代中gc次數
2.-gcutil:與-gc基本相同,但輸出的是已使用空間佔總空間的大小
jinfo
Configuration Info for Java:即時的查看和調整虛擬機器各項參數
1.用法:
jinfo [option] <pid>
2.參數:
jinfo 主要就是flag參數了,已經解釋的很清楚了,這裡直接做示範好了
3.實際舉例
1.擷取進程30018的SurvivorRatio資訊
2.擷取進程30018 所有的jvm資訊
這個命令比jps -v更加詳細
jmap
列印出某個java進程(使用pid)記憶體內的,所有‘對象’的情況(如:產生那些對象,及其數量)。可以輸出所有記憶體中對象的工具,甚至可以將VM 中的heap,以二進位輸出成文本。使用方法 jmap -histo pid。如果連用SHELL jmap -histo pid>a.log可以將其儲存到文本中去,在一段時間後,使用文本對比工具,可以對比出GC回收了哪些對象。jmap -dump:format=b,file=outfile 3024可以將3024進程的記憶體heap輸出出來到outfile檔案裡,再配合MAT(記憶體分析工具(Memory Analysis Tool)或與jhat (Java Heap Analysis Tool)一起使用,能夠以映像的形式直觀的展示當前記憶體是否有問題。
1.用法
jmap [option] <pid>
2.參數
1)、options: executable Java executable from which the core dump was produced.(可能是產生core dump的java可執行程式)core 將被列印資訊的core dump檔案remote-hostname-or-IP 遠程debug服務的主機名稱或ipserver-id 唯一id,假如一台主機上多個遠程debug服務 2)、基本參數:-dump:[live,]format=b,file=<filename> 使用hprof二進位形式,輸出jvm的heap內容到檔案=. live子選項是可選的,假如指定live選項,那麼只輸出活的對象到檔案. -finalizerinfo 列印正等候回收的對象的資訊.-heap 列印heap的概要資訊,GC使用的演算法,heap的配置及wise heap的使用方式.-histo[:live] 列印每個class的執行個體數目,記憶體佔用,類全名資訊. VM的內部類名字開頭會加上首碼”*”. 如果live子參數加上後,只統計活的對象數量. -permstat 列印classload和jvm heap長久層的資訊. 包含每個classloader的名字,活潑性,地址,父classloader和載入的class數量. 另外,內部String的數量和佔用記憶體數也會列印出來. -F 強迫.在pid沒有相應的時候使用-dump或者-histo參數. 在這個模式下,live子參數無效. -h | -help 列印輔助資訊 -J 傳遞參數給jmap啟動的jvm. pid 需要被列印配相資訊的java進程id
3.實際舉例
1.jmap -heap 列印heap的概要資訊,GC使用的演算法,heap的配置及wise heap的使用方式.
這個命令非常直觀的顯示了JVM各個地區的生存情況,線上還款記憶體出現異常可以先用這個命令做一個大致的瞭解
2.jmap -histo:
這個命令會把所有的類都打出來,並按佔用記憶體的大小進行排序
3.jmap -dump:
解釋下 jmap -F -dump:format=b,file=payment.bin 30018: 使用hprof二進位形式,輸出進程為30018的jvm的heap內容到檔案payment.bin
jhat
是用來分析java堆的命令,可以將堆中的對象以html的形式顯示出來,包括對象的數量,大小等等,並支援物件查詢語言
我們現在來分析下上文產生的payment.bin
用瀏覽器訪問http://localhost:7000/,會發現所有的類按包名進行分類,我們可以訪問底部的這個標籤,看到的內容和jmap -histo:是一樣的
參考
http://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024986.html
http://blog.csdn.net/zlzlei/article/details/46471627
Java虛擬機器監控命令