GC日志打印添加以及說明
項目經常自動重啟,但是沒有gc日志和dump文件。可以使用一下命令添加日志:
-XX:+PrintGCDetails -XX:+UseStringDeduplication -Xmx100M -XX:+UseG1GC -XX:+PrintGCTimeStamps -Xloggc:gc-%t.log -XX:+UseGCLogFileRotation -XX:GCLogFileSize=10M -XX:+HeapDumpAfterFullGC -XX:HeapDumpPath=e:\testDump
說明:
-XX:+PrintGCDetails 打印gc日志詳情,比如:
40.951: [GC pause (G1 Evacuation Pause) (young), 0.0031053 secs] [Parallel Time: 1.7 ms, GC Workers: 13] [GC Worker Start (ms): Min: 40951.5, Avg: 40951.6, Max: 40951.6, Diff: 0.1] [Ext Root Scanning (ms): Min: 0.3, Avg: 0.5, Max: 1.6, Diff: 1.2, Sum: 6.6] [Update RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1] [Processed Buffers: Min: 0, Avg: 0.2, Max: 1, Diff: 1, Sum: 2] [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.0, Diff: 0.0, Sum: 0.0] [Object Copy (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.2] [Termination (ms): Min: 0.0, Avg: 1.0, Max: 1.1, Diff: 1.1, Sum: 13.0] [Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 13] [GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1] [GC Worker Total (ms): Min: 1.5, Avg: 1.5, Max: 1.6, Diff: 0.1, Sum: 20.0] [GC Worker End (ms): Min: 40953.1, Avg: 40953.1, Max: 40953.1, Diff: 0.0] [Code Root Fixup: 0.0 ms] [Code Root Purge: 0.0 ms] [String Dedup Fixup: 0.3 ms, GC Workers: 13] [Queue Fixup (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0] [Table Fixup (ms): Min: 0.2, Avg: 0.2, Max: 0.3, Diff: 0.0, Sum: 3.1] [Clear CT: 0.1 ms] [Other: 1.0 ms] [Choose CSet: 0.0 ms] [Ref Proc: 0.9 ms] [Ref Enq: 0.0 ms] [Redirty Cards: 0.1 ms] [Humongous Register: 0.0 ms] [Humongous Reclaim: 0.0 ms] [Free CSet: 0.0 ms] [Eden: 0.0B(5120.0K)->0.0B(5120.0K) Survivors: 0.0B->0.0B Heap: 95.3M(100.0M)->95.3M(100.0M)] [Times: user=0.06 sys=0.00, real=0.00 secs]
eden區:回收前的內存(eden區總內存) ->回收后的內存(eden區總內存) Survivors: 回收前內存->回收后內存 堆區: 回收前內存(堆總內存) ->回收后內存(堆總內存)
-XX:+UseG1G -XX:+UseStringDeduplication
Note 1:要想使用此功能,你需要把你的Java升級到Java 8 update 20以及往后的版本。
Note 2:“ -XX:+UseStringDeduplication” 參數是運行在G1之上的,所以你需要在G1下使用此參數才會生效。
這個網上看是說能節省內存,可是自己使用profile比對,發現除了減少了一部分內存,full GC的次數大大減少了。附上自己的截圖:
-XX:+PrintGCDetails -Xmx100M -XX:+UseG1GC -Xloggc:gc-%t.log -XX:+UseGCLogFileRotation -XX:GCLogFileSize=10M -XX:+HeapDumpAfterFullGC -XX:HeapDumpPath=e:\testDump

-XX:+PrintGCDetails -Xmx100M -XX:+UseG1GC -XX:+UseStringDeduplication -Xloggc:gc-%t.log -XX:+UseGCLogFileRotation -XX:GCLogFileSize=10M -XX:+HeapDumpAfterFullGC -XX:HeapDumpPath=e:\testDump

-Xloggc:gc-%t.log :GC日志文件名稱
-XX:GCLogFileSize=10M 日志文件大小
-XX:+HeapDumpAfterFullGC fullgc前dump文件保存
-XX:HeapDumpPath=e:\testDump dump文件保存路徑
-XX:+PrintGCTimeStamps 輸出GC的時間戳(以基準時間的形式)
-XX:+PrintGCDateStamps 輸出GC的時間戳(以日期的形式,如 2023-05-04T21:53:59.234+0800)

浙公網安備 33010602011771號