Closed sendaoYan closed 6 months ago
一直频繁gc:
打开gc日志重新运行,前两次运行正常,第3次运行长时间未结束。gc日志显示连续5个小时一直在做老年代的内存回收。老年代的内存使用率5242542K/5242880K=99.99%,基本上经过8次fullgc才能回收1K内存(5242543K->5242542K,每次fuzzgc的时间大概是3s左右),差不多30s才能回收1k的老年代内存。 SPECjbb2015启动的jvm选项包含了-XX:ObjectAlignmentInBytes=32选项,该参数默认值是8,改为32之后导致对象对齐变大,进而导致老年代内存使用紧张,直至达到临界值,SPECjbb2015运行时频繁触发fullgc且内存回收效果有限。JDK8版本使用-XX:ObjectAlignmentInBytes=32参数的话,建议在JVM堆内存在100G或者以上才配置该选项。 至于该问题随机出现的原因,可能是跟老年代的内存碎片化程度有关系。正常跑完的时候,老年代的堆内存分布比较集中;长时间跑不完的时候,内存碎片问题严重。
建议:
Steps to Reproduce Steps to reproduce the behavior: https://tone.aliyun-inc.com/ws/sclsdnoi/test_result/311350?tab=3
日志最后的刷新时间是11:11,java进程启动时间是10:06:25,ps aux显示是Sl状态
jstack-2330.log tone_specjbb2015_jdk11_default.log
Execution environment