报错一:
[ParNew (promotion failed): 320138K->320138K(353920K), 0.2365970
secs]42576.951: [CMS: 1139969K->1120688K(2166784K), 9.2214860 secs]
1458785K->1120688K(2520704K), 9.4584090 secs]
- 原因是由于救助空间不够,从而向年老代转移对象,年老代没有足够的空间来容纳这些对象,导致一次full gc的产生
解决办法:
1、增大救助空间
增大救助空间就是调整-XX:SurvivorRatio参数,这个参数是Eden区和Survivor
区的大小比值,默认是 8,也就是说 Eden 区是 Survivor 区的 8 倍大小,要注意
Survivo是有两个区的,因此Surivivor其实占整个young genertation的1/10。
调小这个参数将增大 survivor 区,让对象尽量在 survitor 区呆长一点,减少进
入年老代的对象
2、增大年老代或者去掉救助空间
去掉救助空间的想法是让大部分不能马上回收的数据尽快进入年老代,加快年老
代的回收频率,减少年老代暴涨的可能性,这个是通过将-XX:SurvivorRatio 设
置成比较大的值(比如 65536)来做到
报错二:
[GC 90010.628: [ParNew: 261760K->261760K(261952K),
0.0000350secs]90010.628: [CMS (concurrent mode failure)]
- 原因是新空间分配请求在年老代的剩余空间中无法得到满足。
解 决 办 法 是 需 要 减 少 young 、 增 加 old 的 大 小 , 或 者 使 用
-XX:CMSFullGCsBeforeCompaction 并设置较小的值,提高 full gc 后压缩 old
的频次,避免 young 大对象无法晋升到 old
网友评论