[关闭]
@zhanjindong 2015-06-08T19:30:27.000000Z 字数 1457 阅读 2723

OSSP生产环境VM参数

日均PV:1.4E左右
Tuning


  1. -Xms4096m
  2. -Xmx4096m
  3. -Xss256k
  4. -XX:PermSize=256m
  5. -XX:MaxPermSize=256m
  6. -XX:NewSize=512m
  7. -XX:MaxNewSize=512m
  8. -XX:SurvivorRatio=16
  9. -XX:+UseParNewGC
  10. -XX:ParallelGCThreads=16
  11. -XX:MaxTenuringThreshold=32
  12. -XX:+UseConcMarkSweepGC
  13. -XX:ParallelCMSThreads=8
  14. -XX:+CMSParallelRemarkEnabled
  15. -XX:+CMSPermGenPrecleaningEnabled
  16. -XX:CMSInitiatingOccupancyFraction=70
  17. -XX:+UseCMSCompactAtFullCollection

-XX:+UseParNewGC
-XX:+UseParallelGC的区别:http://stackoverflow.com/questions/2101518/difference-between-xxuseparallelgc-and-xxuseparnewgc
最大的区别:-XX:+UseParNewGC可以配合老年代的CMS收集器使用,另外-XX:+UseParallelGC针对特别大的堆(overt 10GB)有特别的优化措施。

-XX:+CMSParallelRemarkEnabled 降低标记停顿
-XX+UseCMSCompactAtFullCollection 在FULL GC的时候, 压缩内存, CMS是不会移动内存的, 因此, 这个非常容易产生碎片, 导致内存不够用, 因此, 内存的压缩这个时候就会被启用。 增加这个参数是个好习惯。

-XX:+CMSPermGenPrecleaningEnabled:CMS的同时对perm gen进行收集?

-XX:CMSInitiatingOccupancyFraction老年代达到70%CMS开始执行垃圾回收。CMSInitiatingOccupancyFraction,这个参数设置有很大技巧,基本上满足(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion failed。比如应用中Xmx是6000,Xmn是500,那么Xmx-Xmn是5500兆,也就是年老代有5500兆,CMSInitiatingOccupancyFraction=90说明年老代到90%满的时候开始执行对年老代的并发垃圾回收(CMS),这时还剩10%的空间是5500*10%=550兆,所以即使Xmn(也就是年轻代共500兆)里所有对象都搬到年老代里,550兆的空间也足够了,所以只要满足上面的公式,就不会出现垃圾回收时的promotion failed;

CMS的另一个缺点是它需要更大的堆空间。因为CMS标记阶段应用程序的线程还是在执行的,那么就会有堆空间继续分配的情况,为了保证在CMS回 收完堆之前还有空间分配给正在运行的应用程序,必须预留一部分空间。也就是说,CMS不会在老年代满的时候才开始收集。相反,它会尝试更早的开始收集,已 避免上面提到的情况:在回收完成之前,堆没有足够空间分配!默认当老年代使用68%的时候,CMS就开始行动了。 – XX:CMSInitiatingOccupancyFraction =n 来设置这个阀值。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注