jvm性能调优

目前有些项目的web服务器按期会出现没有响应的情况,有可能由服务器的full gc一块儿的长暂停web

基于项目经验,给出以下调优sample参数算法

-Xms4096m //JVM最小可用内存服务器

-Xmx4096m //JVM最大可用内存多线程

-XX:NewSize=1024m //新生代内存空间 通常为jvm内存空间的1/3到1/4并发

-XX:MaxNewSize=1024m//新生代最大内存空间 jvm

-XX:PermSize=256m //永生代的内存空间(class的元数据等等信息,根据实际项目来)spa

-XX:MaxPermSize=256m//永生代的最大内存空间.net

-Xverify:none//类加载过程:加载、验证、准备、解析、初始化,   验证阶段对JVM是重要但不是必要阶段,能够经过-Xverify:none参数关闭大部分类验证措施。命令行

-XX:+UseParNewGC   //新生代的内存回收算法(若是老年代为cms的话,新生代就为UseParNewGC   )线程

-XX:+UseConcMarkSweepGC//老年代的内存回收算法(采用CMS并发回收算法, http://blog.csdn.net/linsongbin1/article/details/51686158    和并行的区别能够百度一下)

-XX:+UseCMSCompactAtFullCollection//(CMS是标记算法,会产生内存碎片,开启此项,就是每次cms回收后会对内存进行压缩,这样会影响效率可是碎片一多会引发full gc)

-XX:CMSFullGCsBeforeCompaction=3//(配合上面的 选项,就是多少次cms后进行内存压缩,根据项目状况自行调整)

-XX:+CMSParallelRemarkEnabled//(cms标记算法的第三步,从新标记(CMS-remark)会暂停全部应用,开启此项就是从新标记的时候采用多线程同时进行,提升效率)

-XX:+CMSScavengeBeforeRemark//(强制remark以前开始一次minor gc,减小remark的暂停时间可是在remark以后也将当即开始又一次minor gc

-XX:CMSInitiatingOccupancyFraction=70//(默认CMS是在tenured generation沾满68%的时候开始进行CMS收集,若是你的年老代增加不是那么快,而且但愿下降CMS次数的话,能够适当调高此值

-XX:SoftRefLRUPolicyMSPerMB=0//这个参数比较有用的,官方解释是:Soft reference在虚拟机中比在客户集中存活的更长一些。其清除频率能够用命令行参数 -XX:SoftRefLRUPolicyMSPerMB=<N>来控制,这能够指定每兆堆空闲空间的 soft reference 保持存活(一旦它不强可达了)的毫秒数,这意味着每兆堆中的空闲空间中的 soft reference 会(在最后一个强引用被回收以后)存活1秒钟。注意,这是一个近似的值,由于  soft reference 只会在垃圾回收时才会被清除,而垃圾回收并不总在发生。系统默认为一秒,我以为不必等1秒,客户集中不用就马上清除,改成 -XX:SoftRefLRUPolicyMSPerMB=0;


另外 ,年轻代和老年代的回收算法是不同的,须要配套使用,详细能够百度,还有开启并行和并发算法的时候,能够指定CPU数,通常不用指定默认就能够