4核8g机器的jvm通用参数模板

4核8g的机器针对于这个系统的jvm参数如下:

-Xms4096M?

-Xmx4096M?

-Xmn3072M?

-Xss1M ?

-XX:PermSize=256M?

-XX:MaxPermSize=256M?

-XX:+UseParNewGC?

-XX:+UseConcMarkSweepGC?

-XX:CMSInitiatingOccupancyFaction=92?

-XX:+UseCMSCompactAtFullCollection?

-XX:CMSFullGCsBeforeCompaction=0

1.为什么设置4g的堆内存大小

8g的机器一般分配一半的最大内存就可以了,因为机器本上还要占用一定内存

2.为什么设置3g的新生代内存空间

为了让对象尽可能的在新生代的eden区和survivor区按照默认8:1:1的比例来分配时尽可能的让survivor区内存多一点,达到300兆左右,这样可以防止每次垃圾回收过后对象几十兆,这几十兆可能是部分请求未处理完毕,是一定会发生的.所以这些对象肯定会触发动态年龄判定规则,让部分对象进入老年代.

3.CMSFullGCsBeforeCompaction设置为0,然后CMSInitiatingOccupancyFaction设置为92为什么

首先CMSInitiatingOccupancyFaction设置为92,证明在当老年代的内存使用率到达92%,之后就需要进行fullgc了

但是一般设置该值都比较低才对,因为存在内存碎片的问题.可能还没使用那么多内存,剩余内存就因为内存碎片而放不下了,就会进行fullgc.所以一般设置低一点.保证fullgc之后可以有剩余内存可以放入对象.

但是为什么这里设置为92呢.因为CMSFullGCsBeforeCompaction设置为0了,意思是每次在fullGC之后就对内存碎片进行回收,正因为如此,CMSInitiatingOccupancyFaction才能设置那么高.可以更高效的利用老年代的内存.

4. CMSParallelInitialMarkEnabled这个参数是做什么的

该参数可以让fullgc的频率进一步降低.意思是cms垃圾回收器的初始标记阶段开启多线程并发执行.

因为在初始标记阶段是会进行stop the world的,导致系统卡顿,所以开启多线程并发执行可以减少stw的时间.这里比较纳闷.应该默认就给开启的.竟然要手动开启

5. CMSScavengeBeforeRemark

这个参数是指在cms的重新标记之前,先尽量执行一次younggc,因为cms重新标记也是会stw的,如果在重新标记之前,先执行younggc的话,就可以让cms在重新标记时少扫描一些对象.同样可以提升cms的重新标记的性能.较少耗时.

总结:

上述参数设置过之后基本上fullgc都在几天一次了,基于上面参数可以作为一个通用的模板.对于一些普通的业务系统,保证jvm性能不会有太大问题.但是上面的参数时针对4核8g的机器的,如果机器不满足这个要求,或者该机器上部署了多个项目,就需要另行设置了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值