- 参考其他人的设置:服务器内存15G,war包启动命令如下
nohup java -Xms7168m -Xmx7168m -Xmn4096m -XX:SurvivorRatio=8 -XX:-UseAdaptiveSizePolicy
-XX:PretenureSizeThreshold=10485760 -XX:+UseParNewGC -XX:+UseConMarkSweepGC -jar /usr/soft/aaa.war
- 各参数解释
-Xms7168m 堆内存分配7G
-Xmx7168m 最大堆内存7G
-Xmn4096m 新生代分配4G
-XX:SurvivorRatio=8 E区与S区比例为8:1:1,即S区是E区的1/8
-XX:-UseAdaptiveSizePolicy 取消自适应策略, 如果开启 AdaptiveSizePolicy,则每次 GC 后会重新计算 Eden、From 和 To 区的大小,计算依据是 GC 过程中统计的 GC 时间、吞吐量、内存占用量 。 开启 AdaptiveSizePolicy 的参数为: -XX:+UseAdaptiveSizePolicy
-XX:PretenureSizeThreshold=10485760 最大对象的阈值是10M,意思是新生对象大于等于10m时,直接进入老年代。
-XX:+UseParNewGC 新生代采用ParNew垃圾回收器
-XX:+UseConMarkSweepGC 老年代采用CMS垃圾回收器
自己的生产环境准备的参数:
JAVA_OPTS="-Xms7168m -Xmx7168m -Xmn4096m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=256m -XX:SurvivorRatio=8 -XX:-UseAdaptiveSizePolicy -XX:PretenureSizeThreshold=10485760 -XX:+UseParNewGC -XX:+UseConMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70"
参数解释
- 初始化堆内存:-XX:InitialHeapSize=2048m(-Xms2048m -简写)
- 最大堆内存:-XX:MaxHeapSize=2048m (-Xmx2048m -简写)
- 设置年轻代大小.:-Xmn512m
- 线程的堆栈大小:-Xss256k:设置每个线程的堆栈大小.JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右.
- 初始化永久代堆内存: -XX:PermSize=512m
- 最大永久代堆内存:-XX:MaxPermSize
- Eden区与Survivor区的大小比值:-XX:SurvivorRatio=8 设置年轻代中Eden区与Survivor区的大小比值.设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的 1/10
- 年轻代与老年代的比:-XX:NewRatio=4 设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代).设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
- 老年代垃圾收集器:CMS(Concurrent Mark Sweep)并发标记清理收集器:CMS(-XX:+UseConcMarkSweepGC)收集器在老年代使用,专门收集那些在主要回收中不可能到达的年老对象。它与应用程序并发执行,在年老代保持一直有足够的空间以保证不会发生年轻代晋升失败。
- -XX:CMSFULLGCsBeforCompaction=5:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间会产生“碎片”,使得运行效率低。此值设置运行多少次GC以后对内训空间进行压缩、整理。
- -XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片。
- 为了减少第二次暂停的时间,开启并行remark: -XX:+CMSParallelRemarkEnabled
- CMS次数执行次数:默认CMS是在tenured generation沾满68%的时候开始进行CMS收集,如果你的年老代增长不是那么快,并且希望降低CMS次数的话,可以适当调高此值:-XX:CMSInitiatingOccupancyFraction=80
- 年轻代的垃圾收集器: -XX:+UseParNewGC :设置年轻代为并行收集。可以和CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行配置,所以无需再配置此值。