1. 程式人生 > >深入理解_JVM內存管理JDK監控工具與故障處理工具07

深入理解_JVM內存管理JDK監控工具與故障處理工具07

最大 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