聊一聊GC日志,線程轉(zhuǎn)儲和堆轉(zhuǎn)儲
聊一聊GC日志,線程轉(zhuǎn)儲和堆轉(zhuǎn)儲
?垃圾收集(Garbage collection,GC)日志?線程轉(zhuǎn)儲(Thread dump)?堆轉(zhuǎn)儲(Heap dump)
介些都是些啥東東
GC日志
線程轉(zhuǎn)儲
堆轉(zhuǎn)儲
來!出來亮個相
GC日志
2021-04-01T12:32:24.398+0800: 0.356: [GC pause (G1 Evacuation Pause) (young), 0.0215287 secs][Parallel Time: 20.0 ms, GC Workers: 8][GC Worker Start (ms): Min: 355.9, Avg: 356.3, Max: 358.4, Diff: 2.4][Ext Root Scanning (ms): Min: 0.0, Avg: 6.4, Max: 16.7, Diff: 16.7, Sum: 51.4][Update RS (ms): Min: 0.0, Avg: 1.0, Max: 2.5, Diff: 2.5, Sum: 8.2][Processed Buffers: Min: 0, Avg: 1.1, Max: 5, Diff: 5, Sum: 9][Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.1][Object Copy (ms): Min: 2.9, Avg: 11.9, Max: 17.5, Diff: 14.6, Sum: 95.3][Termination (ms): Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.2, Sum: 0.9][Termination Attempts: Min: 1, Avg: 2.5, Max: 5, Diff: 4, Sum: 20][GC Worker Other (ms): Min: 0.0, Avg: 0.1, Max: 0.1, Diff: 0.1, Sum: 0.5][GC Worker Total (ms): Min: 17.5, Avg: 19.6, Max: 19.9, Diff: 2.4, Sum: 156.5][GC Worker End (ms): Min: 375.8, Avg: 375.9, Max: 375.9, Diff: 0.1][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.5 ms][Other: 1.0 ms][Choose CSet: 0.0 ms][Ref Proc: 0.4 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.4 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 12.0M(12.0M)->0.0B(14.0M) Survivors: 0.0B->2048.0K Heap: 12.6M(252.0M)->7848.3K(252.0M)][Times: user=0.08 sys=0.00, real=0.02 secs]
線程轉(zhuǎn)儲
"HeavyThread" #11 prio=5 os_prio=0 tid=0x000001885e78f000 nid=0x2e3c runnable [0x0000001b443fe000]java.lang.Thread.State: RUNNABLEat java.io.FileOutputStream.writeBytes(Native Method)at java.io.FileOutputStream.write(Unknown Source)at java.io.BufferedOutputStream.flushBuffer(Unknown Source)at java.io.BufferedOutputStream.flush(Unknown Source)- locked <0x00000006c1407098> (a java.io.BufferedOutputStream)at java.io.PrintStream.write(Unknown Source)- locked <0x00000006c1406a90> (a java.io.PrintStream)at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source)at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source)at sun.nio.cs.StreamEncoder.flushBuffer(Unknown Source)- locked <0x00000006c14201b0> (a java.io.OutputStreamWriter)at java.io.OutputStreamWriter.flushBuffer(Unknown Source)at java.io.PrintStream.newLine(Unknown Source)- eliminated <0x00000006c1406a90> (a java.io.PrintStream)at java.io.PrintStream.println(Unknown Source)- locked <0x00000006c1406a90> (a java.io.PrintStream)at com.jeremy.tech.lab.CPULoadTester$HeavyLoadTask.run(CPULoadTester.java:13)at java.lang.Thread.run(Unknown Source)
堆轉(zhuǎn)儲
這些文件都用在什么場景
GC日志
線程轉(zhuǎn)儲
內(nèi)存轉(zhuǎn)儲
OutOfMemoryError問題。我怎么獲取這些文件呢
GC日志
?java 8及以前版本
-XX:+PrintGCDetails-XX:+PrintGCDateStamps-Xloggc:<file-path>
?java 9及以后版本
-Xlog:gc*:file=<file-path>注:<file-path>為垃圾收集日志的生成文件路徑
線程轉(zhuǎn)儲
jstack 工具來獲取線程轉(zhuǎn)儲, jstack 在 JDK_HOME\bin 目錄下。線程轉(zhuǎn)儲文件可以用如下方式獲?。?/section>jstack -l <pid> > <file-path>注:<pid>為應(yīng)用進(jìn)程號;<file-path>為線程轉(zhuǎn)儲文件生成的文件路徑
堆轉(zhuǎn)儲
jmap 工具來獲取堆轉(zhuǎn)儲, jmap 在 JDK_HOME/bin 目錄下。獲取堆轉(zhuǎn)儲文件用以下方法即可:jmap -dump:format=b,file=<file-path> <pid>注:<pid>為應(yīng)用進(jìn)程號;<file-path>為堆轉(zhuǎn)儲文件生成的文件路徑
分析工具
GC日志
?Gceasy (https://gceasy.io/)?IBM GC & Memory visualizer (https://www.ibm.com/support/pages/java-sdk-monitoring-and-post-mortem)?HP Jmeter (https://myenterpriselicense.hpe.com/cwp-ui/free-software/HPJMETER)?Google Garbage Cat (https://code.google.com/archive/a/eclipselabs.org/p/garbagecat)
線程轉(zhuǎn)儲
?fastThread (https://fastthread.io/)?Samurai (https://github.com/yusuke/samurai)?IBM Thread & Monitor analyzer (https://www.ibm.com/support/pages/java-sdk-monitoring-and-post-mortem)?Visual VM (https://visualvm.github.io/)
堆轉(zhuǎn)儲
?Eclipse MAT (https://www.eclipse.org/mat/)?HeapHero (https://heaphero.io/)?JVisualVM (https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jvisualvm.html)
最后
歡迎關(guān)注我的公眾號“須彌零一”,原創(chuàng)技術(shù)文章第一時間推送。
