Java虛擬機--經常使用Java命令(二)

1.關於Java命令之jstatjava

  是用於監控虛擬機各類運行狀態信息的命令工具,包括了堆Heap size垃圾回收情況的監控。web

  jstat命令格式:瀏覽器

  

  參數含義:服務器

  option:選項,咱們通常使用-gc查看gc狀況工具

  vmid:VM的進程號,即當前運行的Java進程號spa

  interval:間隔時間,單位爲秒或毫秒命令行

  count:打印次數,若是缺省則打印無數次debug

  注:interval和count表明查詢間隔和打印次數,若省略這兩個參數,則只查詢一次。假設須要每200毫秒查詢一次當前Java進程垃圾收集狀況,一共查詢5次,則:3d

  

  optionorm

  表明着用戶但願查詢的虛擬機信息,主要分爲3類:類裝載垃圾收集運行期編譯情況,具體選項和做用以下:

  

  常見命令組合:

  jstat -class  pid:顯示加載class的數量及所佔空間等信息。其中:loaded表示類裝載的數量;bytes表示裝載類的字節數;unloaded表示卸載類的數量;bytes表示卸載類的的字節數;time表示裝載和卸載類所用的時間。

  

  jstat -compiler  pid:顯示VM實時編譯的數量等信息。其中:compiled表示編譯任務執行數量;failed表示編譯任務失敗的次數;invalid表示編譯任務失效的數量;time表示編譯任務消耗的時間;failedType表示最後一個編譯失敗任務的類型;failedMethod表示最後一個編譯任務失敗所在的類及方法。

  

  jstat -gc  pid:顯示gc信息,查看次數及時間。其中:s0c表示年輕代中第一個survivor(倖存區)的字節容量;s1c年輕代中第二個survivor的容量;s0u表示年輕代第一個survivor已使用空間;s1u表示年輕代第二個survivor已使用空間;ec表示Eden的容量;eu表示Eden的已使用空間;oc表示老年代的容量;ou表示老年代已使用的空間;mc表示Perm(持久代)的容量;mu持久代已使用空間;YGC表示從程序啓動到採樣時年輕代中gc次數;YGCT表示從程序啓動到採樣時年輕代gc所用時間;FGC從程序啓動到採樣時old代gc次數;FGCT表示時間;GCT程序啓動到採樣時gc的總時間。

  

  jstat -gccapacity  pid:能夠顯示在VM內存中三代對象的使用和佔用大小。其中NGCMN表示年輕代中初始化(最小)的大小;NGCMX表示年輕代初始化(最大)的大小;NGC表示年輕代中當前的容量;S0CS1CEC同上;OGCMN老年代初始化(最小)的大小;OGCMX老年代初始化(最大)的大小;OGC老年代當前新生成的容量;OC老年代的容量;其餘同上。

  

  jstat -gcutil  pid:統計gc信息。s0年輕代第一個survivor已使用的佔當前容量百分比;s1年輕代第二個survivor百分比;E表示Eden已使用的佔當前容量百分比;O表示老年代的百分比;M表示持久代的百分比;其餘同上。

  

  jstat -gcnew  pid:年輕代對象的信息。TT持有次數限制;MTT最大持有次數限制。

  

  jstat -gcnewcapacity  pid:年輕代對象的信息及其佔用量。

  

  jstat -gcold pid:old代對象的信息。

  

  jstat -gcoldcapacity pid:old代對象的信息及其佔用量。

  

  jstat -printcompilation pid:當前VM執行的信息。

  

2.關於Java命令之jinfo

  此命令能夠輸出Java進程、core文件或遠程debug服務器的配置信息,這些配置信息包括JAVA系統參數及命令行參數。

   

  讓咱們jinfo pid試一下:

  

3.關於Java命令之jhat

  jhat的全名爲Java Heap Analysis Tool,便是一個用來分析java堆狀況的命令。如用jmap生成dump文件,而後用jhat來查看。

  導出Dump文件:

  先生成Dump文件:jmap -dump:format=b,file=<fileName> pid

  而後解析Java堆轉儲文件,並啓動一個web server:jhat <fileName>  會啓動一個端口,訪問localhost+端口號就能夠了。

   

  分析

  通常查看堆異常狀況主要看這兩個部分(在瀏覽器頁面最下邊):

  

  打開如圖:

  

  

  具體排查時須要結合代碼,觀察是否大量應該被回收的對象在一直被引用或是否有佔用內存特別大的對象沒法被回收。

 

 

    參考資料:http://www.hollischuang.com/archives/308

相關文章
相關標籤/搜索