深入理解_JVM內存管理JDK監控工具與故障處理工具07
阿新 • • 發佈:2017-06-24
最大 jhat hotspot interval 統計信息 傳遞 啟動 令行 相同
1、jps:
JVM process Status Tool,顯示系統所有的HotSpot虛擬機進程以及進程的本地虛擬機的唯一ID(LVMID,Local Virtual Machine Identifier)。
對於本地虛擬機進程來說,LVMID與操作系統的進程ID(PID,Process Identifier)是一致的。如果啟動了多個虛擬機進程,就需要顯示主類的功能才能區分了。
jps命令格式:
jps [option] [hostid]
jps主要選項:
-v :輸出虛擬機進程啟動時JVM參數。
-q :只輸出LVMID,省略主類的名稱;
-m :輸出虛擬機進程啟動時傳遞給主類main()函數的參數;
-l :輸出主類的全名,如果進程執行的是jar包,輸出jar包路徑;
2、jstat:
用於監視虛擬機各種運行狀態信息的命令行工具。
jstat命令格式:
jstat [option vimd] [interval [s|ms] [count]]
VIMD與LVMID的區別:
<1>如果是本地虛擬主機,VIMD與LVMID是一致的。
<2>如果是遠程虛擬機進程,
VIMD的格式:[protocol:][//]lvmid[@hostname[:port]/servername]
interval:代表查詢間隔;
count:次數。
如果省略上述2個參數,則只查詢一次。
jstat主要選項:
jstat -class pid:監視class裝載、卸載的數量,總空間及類裝載所耗費的時間。
jstat -gc pid:監視java堆狀況,包括1個Eden區,2個Survivor區,老生代、持久代等的容量、已用空間。顯示gc的信息,查看gc的次數,及時間。其中最後五項,分別是young gc的次數,young gc的時間,full gc的次數,full gc的時間,gc的總時間。
jstat -gccapacity:監視內容與-gc基本一樣,但輸出主要關註java堆各區域使用到的最大和最小空間。如:PGCMN顯示的是最小perm的內存使用量,PGCMX顯示的是perm的內存最大使用量,PGC是當前新生成的perm內存占用量,PC是當前perm內存占用量。其他的可以根據這個類推, OC是old內存的占用量。
jstat -gcutil pid:監視內容與-gc基本一樣,但主要輸出已使用空間占總空間的百分比。
jstat -gccause pid:與gcutil一樣,但是會額外輸出導致上一次GC產生的原因。
jstat -gcnew pid:監控新生代GC的狀況。
jstat -gcnewcapacity pid:監控內存與-gcnew基本相同,輸出主要關註到使用的最大和最小空間。
jstat -gcold pid:監控老生代GC的狀況。
jstat -gcoldcapacity pid:監控內存與-gcold基本相同,輸出主要關註到使用的最大和最小空間。
jstat -gcpermcapacity pid: 輸出永久代使用到的最大和最小空間。
jstat -compiler pid:顯示VM實時編譯的數量等信息。
jstat -printcompilation pid:輸出已經被JIT編譯的方法。
3、jinfo:
實時查看和調整虛擬機的各項參數。
jinfo命令格式:
jinfo [option] pid
jinfo主要選項:
jinfo -flag <name> pid : name是JVM參數的名字。
例如:
執行:C:\Users\yyang7>jinfo -flag CMSInitiatingOccupancyFraction 8072
結果:-XX:CMSInitiatingOccupancyFraction=-1
4、jmap:
功能:
<1> 用於生成堆轉儲快照(heapdump)
如果不適用該命令,還可以嘗試試用:-XX:+HeapDumpOnOutMemoryError參數,可以讓虛擬機在OOM時自動生成dump文件。(疲勞測試時候常開啟該參數)。通過在VM參數後加-XX:+HeapDumpOnOutOfMemoryError -
XX:HeapDumpPath=/home/admin/logs/java.hprof ,在內存溢的時候會dump內存快照及指定內存快照的存儲文件.也可以通過命令行dump命令執行時的內存快照.
<2> 查詢finalize執行隊列,java堆和永久代的詳細信息。
jmap命令格式:
jmap [option] vmid
jmap主要選項:
-dump:生成java堆轉儲快照。格式為:-dump:[live,]format=b,file=<filename> PID,其中live子參數說明是否只dump出存活的對象。
-finalizeinfo:顯示在F-Queue中等待Finalize線程執行finalize方法的對象,只在linux和Solaris平臺下有效。
-heap:顯示java堆的詳細信息,如使用哪種回收器,參數配置,分代狀況等,只在linux和Solaris平臺有效。
-histo:顯示堆中對象統計信息,包括類、實例數量和合計容量。
-permstat:以ClassLoader為統計口徑顯示永久代內存狀態,只在linux和Solaris平臺有效。
-F:當虛擬機進程堆-dump選項沒有響應時,可使用這個選項強制生成dump快照,只在linux和Solaris平臺有效。
5、jhat:
虛擬機堆轉儲快照分析工具,一般不用此工具。
6、jstack:
用於生成虛擬機當前時刻的線程快照,(Threaddump或javacode文件)。
線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合。
主要目的:
定位線程出現長時間停頓的原因,如線程死鎖、死循環、請求外部資源導致的長時間等待等。
jstack命令格式:
jstack [option] vmid
jstack主要選項:
-F:當正常輸出的請求不被響應時,強制輸出線程堆棧。
-l:除堆棧外,顯示關於鎖的附加信息。
-m:如果調用到本地方法的話,可以顯示C/C++信息。
深入理解_JVM內存管理JDK監控工具與故障處理工具07