Java 为什么G1 collertor为对象复制花费了这么多时间
我的java选项是:Java 为什么G1 collertor为对象复制花费了这么多时间,java,garbage-collection,g1gc,Java,Garbage Collection,G1gc,我的java选项是: java -Dsun.zip.disableMemoryMapping=true -Xmx18g -Xms8g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log -XX:NewSize=1500m -XX:MaxNewSize=1500m 这是我的gc日志:
java -Dsun.zip.disableMemoryMapping=true -Xmx18g -Xms8g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log -XX:NewSize=1500m -XX:MaxNewSize=1500m
这是我的gc日志:
2016-12-22T09:45:51.567+0800: 145356.468: [GC pause (G1 Evacuation Pause) (young), 4.0553815 secs]
[Parallel Time: 4052.5 ms, GC Workers: 28]
[GC Worker Start (ms): Min: 145356469.0, Avg: 145356469.4, Max: 145356469.9, Diff: 0.9]
[Ext Root Scanning (ms): Min: 0.6, Avg: 1.0, Max: 1.8, Diff: 1.2, Sum: 29.1]
[Update RS (ms): Min: 12.0, Avg: 12.4, Max: 13.2, Diff: 1.2, Sum: 348.4]
[Processed Buffers: Min: 9, Avg: 13.5, Max: 24, Diff: 15, Sum: 379]
[Scan RS (ms): Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.2, Sum: 2.3]
[Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 1.1]
[Object Copy (ms): Min: 28.7, Avg: 1927.0, Max: 4037.8, Diff: 4009.1, Sum: 53956.0]
[Termination (ms): Min: 0.0, Avg: 2111.2, Max: 4009.0, Diff: 4009.0, Sum: 59114.4]
[Termination Attempts: Min: 1, Avg: 2.2, Max: 5, Diff: 4, Sum: 63]
[GC Worker Other (ms): Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.1, Sum: 2.0]
[GC Worker Total (ms): Min: 4051.4, Avg: 4051.9, Max: 4052.4, Diff: 1.0, Sum: 113453.2]
[GC Worker End (ms): Min: 145360521.3, Avg: 145360521.3, Max: 145360521.4, Diff: 0.1]
[Code Root Fixup: 0.1 ms]
[Code Root Purge: 0.0 ms]
[Clear CT: 0.4 ms]
[Other: 2.4 ms]
[Choose CSet: 0.0 ms]
[Ref Proc: 0.4 ms]
[Ref Enq: 0.0 ms]
[Redirty Cards: 0.5 ms]
[Humongous Register: 0.1 ms]
[Humongous Reclaim: 0.0 ms]
[Free CSet: 0.6 ms]
[Eden: 1424.0M(1424.0M)->0.0B(1416.0M) Survivors: 76.0M->84.0M Heap: 3475.6M(8192.0M)->2071.7M(8192.0M)]
[Times: user=54.84 sys=56.91, real=4.06 secs]
2016-12-22T09:45:51.567+0800:145356.468:[GC暂停(G1疏散暂停)(年轻),4.0553815秒]
[并行时间:4052.5 ms,GC工作人员:28]
[GC工作人员启动(毫秒):最小值:145356469.0,平均值:145356469.4,最大值:145356469.9,差异:0.9]
[外部根扫描(毫秒):最小值:0.6,平均值:1.0,最大值:1.8,差异:1.2,总和:29.1]
[更新RS(ms):最小值:12.0,平均值:12.4,最大值:13.2,差异:1.2,总和:348.4]
[已处理缓冲区:最小值:9,平均值:13.5,最大值:24,差异:15,总和:379]
[扫描RS(毫秒):最小值:0.0,平均值:0.1,最大值:0.2,差值:0.2,总和:2.3]
[代码根扫描(ms):最小值:0.0,平均值:0.0,最大值:0.1,差异:0.1,总和:1.1]
[对象副本(毫秒):最小值:28.7,平均值:1927.0,最大值:4037.8,差异:4009.1,总和:53956.0]
[终端(毫秒):最小值:0.0,平均值:2111.2,最大值:4009.0,差异:4009.0,总和:59114.4]
[终止尝试:最小值:1,平均值:2.2,最大值:5,差异:4,总和:63]
[GC工作人员其他(ms):最小值:0.0,平均值:0.1,最大值:0.2,差异:0.1,总和:2.0]
[GC工人总数(ms):最小值:4051.4,平均值:4051.9,最大值:4052.4,差异:1.0,总和:113453.2]
[GC工作端(ms):最小值:145360521.3,平均值:145360521.3,最大值:145360521.4,差值:0.1]
[代码根修复:0.1毫秒]
[代码根清除:0.0毫秒]
[清晰CT:0.4毫秒]
[其他:2.4毫秒]
[选择CSet:0.0毫秒]
[参考程序:0.4毫秒]
[参考Enq:0.0毫秒]
[信用卡:0.5毫秒]
[超大寄存器:0.1毫秒]
[大量回收:0.0毫秒]
[免费CSet:0.6毫秒]
[伊甸园:1424.0M(1424.0M)->0.0B(1416.0M)幸存者:76.0M->84.0M堆:3475.6M(8192.0M)->2071.7M(8192.0M)]
[次数:user=54.84 sys=56.91,real=4.06秒]
我的cpu有40个内核,有时gc会占用很多时间。我发现大部分时间都花在对象复制上,我想知道在哪种情况下,它会发生,我能做些什么来优化gc
[对象副本(毫秒):最小值:28.7,平均值:1927.0,最大值:4037.8,差异:4009.1,总和:53956.0]
max比min大得多,也许我可以减去gc工作者???我使用-XX:LargePageSizeInBytes=32m并将服务移动到另一台linux服务器(我发现cpu运行队列有时很大)。然后发现gc的时间不超过1秒。我使用-XX:LargePageSizeInBytes=32m并将服务移动到另一台linux服务器(我发现cpu运行队列有时很大)。然后发现的gc不超过1秒。您可以使用
-XX:+G1PrintHeapRegions
来获得更多日志吗?也许你的疏散失败了。可能是重复的。对不起,我刚刚粘贴了我的日志。似乎对象复制花费了很多时间。昨天,我没有使用-XX:NewSize=1500m-XX:MaxNewSize=1500m,我发现一些gc花费了10秒。今天,情况好多了。但我也可以找到3或4秒gc。您可以使用-XX:+G1PrintHeapRegions
来获得更多日志吗?也许你的疏散失败了。可能是重复的。对不起,我刚刚粘贴了我的日志。似乎对象复制花费了很多时间。昨天,我没有使用-XX:NewSize=1500m-XX:MaxNewSize=1500m,我发现一些gc花费了10秒。今天,情况好多了。但我也可以找到3或4秒gc.1。从运行多个服务的物理机迁移到一个虚盘独占 虚拟机 2.洛克曼gu360/vm相关系统配置 3.JAVA启动参数加了一个参数 -XX:LargePageSizeInBytes=32m1。从运行多个服务的物理机迁移到一个虚盘独占 虚拟机 2.洛克曼gu360/vm相关系统配置 3.JAVA启动参数加了一个参数 -XX:LargePageSizeInBytes=32m