JVM 學習筆記記錄
阿新 • • 發佈:2020-07-29
JVM 學習筆記記錄
Sun JDK 監控和故障處理工具
名稱 | 主要作用 |
---|---|
jps | JVM Process Status Tool, 顯示指定系統內所有的HotSpot虛擬機器程序 |
jstat | JVM Statistics Moitoring Tool,用於收集HotSpot虛擬機器各方面的執行資料 |
jinfo | Configuration info for java,顯示虛擬機器配置資訊 |
jmap | Memory Map for java,生成虛擬機器的記憶體轉儲快照(heapdump檔案) |
jhat | JVM Heap Dump Browser,用於分析heapdump檔案,它會建立一個HTTP/HTML伺服器,讓使用者可以在瀏覽器上檢視分析結果 |
jstack | Stack Trace for java,顯示虛擬機器的執行緒快照 |
常用命令:
1. jps -l 查詢LVMID,及主類的名稱 C:\Users\Harry>jps -l 11856 com.ssm.common.jvm.JvmTest 14368 com.ddc.template.TemplateApplication 16848 19664 6640 org.jetbrains.jps.cmdline.Launcher 7732 sun.tools.jps.Jps 2168 org.apache.zookeeper.server.quorum.QuorumPeerMain 2. jps -v 輸出虛擬機器程序引數 C:\Users\Harry>jps -v 11856 JvmTest -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:49232 -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -Dfile.encoding=utf8 3. jstat -gc 11856 250 5 每250毫秒查詢一次程序11856垃圾收集情況狀況,一共查詢5次 C:\Users\Harry>jstat -gc 11856 250 20 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 4. jstat -gc 11856 只查詢一次 C:\Users\Harry>jstat -gc 11856 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 5. jstat -gcutil 11856 查詢各JVM記憶體使用百分比 C:\Users\Harry>jstat -gcutil 11856 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 0.00 93.01 0.00 17.42 19.75 0 0.000 0 0.000 0.000 6. jstat -gcnew 11856 查詢新生代GC狀況 C:\Users\Harry>jstat -gcnew 11856 S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 1024.0 1024.0 0.0 0.0 15 15 0.0 8192.0 7619.8 0 0.000 7. jstat -gcold 11856 查詢老年代GC狀況 C:\Users\Harry>jstat -gcold 11856 MC MU CCSC CCSU OC OU YGC FGC FGCT GCT 4480.0 780.5 384.0 75.8 10240.0 0.0 0 0 0.000 0.000 8. jinfo -flag CMSInitiatingOccupancyFraction 11856 查詢JVM引數的值 C:\Users\Harry>jinfo -flag CMSInitiatingOccupancyFraction 11856 -XX:CMSInitiatingOccupancyFraction=-1 9. jinfo -sysprops 11856 可以把System.getProperties()資訊打印出來 C:\Users\Harry>jinfo -sysprops 11856 Attaching to process ID 11856, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.92-b14 java.runtime.name = Java(TM) SE Runtime Environment java.vm.version = 25.92-b14 ...... 10. jmap -dump:format=b,file=eclipse.bin 11856 生成java堆轉儲快照 C:\Users\Harry>jmap -dump:format=b,file=eclipse.bin 11856 Dumping heap to C:\Users\Harry\eclipse.bin ... Heap dump file created 11. jhat eclipse.bin 分析dump檔案,瀏覽器中訪問http://localhost:7000 C:\Users\Harry>jhat eclipse.bin Reading from eclipse.bin... Dump file created Sun Jul 22 11:55:08 CST 2018 Snapshot read, resolving... Resolving 11914 objects... Chasing references, expect 2 dots.. Eliminating duplicate references.. Snapshot resolved. Started HTTP server on port 7000 Server is ready. 11. jmap -heap 11856 檢視堆中jvm引數情況 Attaching to process ID 11856, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.131-b11 using thread-local object allocation. Parallel GC with 8 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 1073741824 (1024.0MB) NewSize = 357564416 (341.0MB) MaxNewSize = 357564416 (341.0MB) OldSize = 716177408 (683.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 310902784 (296.5MB) used = 90540600 (86.34624481201172MB) free = 220362184 (210.15375518798828MB) 29.121836361555385% used From Space: capacity = 23068672 (22.0MB) used = 11927744 (11.37518310546875MB) free = 11140928 (10.62481689453125MB) 51.70537775213068% used To Space: capacity = 22544384 (21.5MB) used = 0 (0.0MB) free = 22544384 (21.5MB) 0.0% used PS Old Generation capacity = 716177408 (683.0MB) used = 82475416 (78.6546859741211MB) free = 633701992 (604.3453140258789MB) 11.516059439842035% used 13. jmap -dump:live,format=b,file=heap.hprof 11856 將heap.hprof傳輸出來到window電腦上使用mat工具分析。 14. jhat -heap 11856 顯示java堆詳細資訊,如使用哪種回收器、引數配置、分代狀況等,只在linux平臺才可以測試 15. jstack -l 11856 除堆疊外,顯示鎖的附加資訊 "Finalizer" #3 daemon prio=8 os_prio=1 tid=0x00000000152da800 nid=0x18b4 in Object.wait() [0x000000001664e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000ff608ee0> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) - locked <0x00000000ff608ee0> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) Locked ownable synchronizers: - None "Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x00000000152b9000 nid=0x444c in Object.wait() [0x000000001654f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000ff606b50> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference.tryHandlePending(Reference.java:191) - locked <0x00000000ff606b50> (a java.lang.ref.Reference$Lock) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) Locked ownable synchronizers: - None
本文由部落格群發一文多發等運營工具平臺 OpenWrite 釋出