千家信息网

JVM调优的几种策略分别是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这期内容当中小编将会给大家带来有关JVM调优的几种策略分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JVM参数调优是一个很头痛的问题,可能和应用有关系,别
千家信息网最后更新 2026年11月02日JVM调优的几种策略分别是什么

这期内容当中小编将会给大家带来有关JVM调优的几种策略分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

JVM参数调优是一个很头痛的问题,可能和应用有关系,别人说可以的对自己不一定管用。下面是本人一些JVM调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,dell2950服务器。

JVM调优

一:JVM调优之串行垃圾回收

也就是默认配置,完成10万request用时153秒。JVM参数配置如下:

$JAVA_ARGS.="-Dresin.home=$SERVER_ROOT-server   -Xms2048M-Xmx2048M-Xmn512M-XX:PermSize=256M-XX:MaxPermSize=256M  -XX:MaxTenuringThreshold=7-XX:GCTimeRatio=19  -Xnoclassgc-Xloggc:log/gc.log-XX:+PrintGCDetails-XX:+PrintGCTimeStamps";

这种配置一般在resin启动24小时内似乎没有大问题,网站可以正常访问,但查看日志发现,在接近24小时时,FullGC执行越来越频繁,大约每隔3分钟就有一次FullGC,每次FullGC系统会停顿6秒左右,作为一个网站来说,用户等待6秒恐怕太长了,所以这种方式有待改善。MaxTenuringThreshold=7表示一个对象如果在救助空间移动7次还没有被回收就放入年老代,GCTimeRatio=19表示java可以用5%的时间来做垃圾回收,1/(1+19)=1/20=5%。

二:JVM调优之并行回收

完成10万request用时117秒,配置如下:

$JAVA_ARGS.="-Dresin.home=$SERVER_ROOT-server-Xmx2048M  -Xms2048M-Xmn512M-XX:PermSize=256M-XX:MaxPermSize=256M -Xnoclassgc-Xloggc:log/gc.log-XX:+PrintGCDetails  -XX:+PrintGCTimeStamps-XX:+UseParallelGC-XX:ParallelGCThreads=20 -XX:+UseParallelOldGC-XX:MaxGCPauseMillis=500 -XX:+UseAdaptiveSizePolicy-XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19";

并行回收我尝试过多种组合配置,似乎都没什么用,resin启动3小时左右就会停顿,时间超过10秒。也有可能是参数设置不够好的原因,MaxGCPauseMillis表示GC***停顿时间,在resin刚启动还没有执行FullGC时系统是正常的,但一旦执行FullGC,MaxGCPauseMillis根本没有用,停顿时间可能超过20秒,之后会发生什么我也不再关心了,赶紧重启resin,尝试其他回收策略。

三:JVM调优之并发回收

完成10万request用时60秒,比并行回收差不多快一倍,是默认回收策略性能的2.5倍,配置如下:

$JAVA_ARGS.="-Dresin.home=$SERVER_ROOT-server  -Xms2048M-Xmx2048M-Xmn512M-XX:PermSize=256M -XX:MaxPermSize=256M-XX:+UseConcMarkSweepGC  -XX:MaxTenuringThreshold=7-XX:GCTimeRatio=19 -Xnoclassgc-Xloggc:log/gc.log-XX:+PrintGCDetails  -XX:+PrintGCTimeStamps-XX:+UseCMSCompactAtFullCollection  -XX:CMSFullGCsBeforeCompaction=0";

这个配置虽然不会出现10秒连不上的情况,但系统重启3个小时左右,每隔几分钟就会有5秒连不上的情况,查看gc.log,发现在执行ParNewGC时有个promotionfailed错误,从而转向执行FullGC,造成系统停顿,而且会很频繁,每隔几分钟就有一次,所以还得改善。UseCMSCompactAtFullCollection是表是执行FullGC后对内存进行整理压缩,免得产生内存碎片,CMSFullGCsBeforeCompaction=N表示执行N次FullGC后执行内存压缩。

四:JVM调优之增量回收

完成10万request用时171秒,太慢了,配置如下:

$JAVA_ARGS.="-Dresin.home=$SERVER_ROOT-server  -Xms2048M-Xmx2048M-Xmn512M-XX:PermSize=256M -XX:MaxPermSize=256M-XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19-Xnoclassgc-Xloggc:log/gc.log  -XX:+PrintGCDetails-XX:+PrintGCTimeStamps-Xincgc";

似乎回收得也不太干净,而且也对性能有较大影响,不值得试。

五:JVM调优之并发回收的I-CMS模式

和增量回收差不多,完成10万request用时170秒。配置如下:

$JAVA_ARGS.="-Dresin.home=$SERVER_ROOT-server  -Xms2048M-Xmx2048M-Xmn512M-XX:PermSize=256M -XX:MaxPermSize=256M-XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19-Xnoclassgc-Xloggc:log/gc.log  -XX:+PrintGCDetails-XX:+PrintGCTimeStamps  -XX:+UseConcMarkSweepGC-XX:+CMSIncrementalMode  -XX:+CMSIncrementalPacing  -XX:CMSIncrementalDutyCycleMin=0 -XX:CMSIncrementalDutyCycle=10-XX:-TraceClassUnloading";

采用了sun推荐的参数,回收效果不好,照样有停顿,数小时之内就会频繁出现停顿,什么sun推荐的参数,照样不好使。

六:JVM调优之递增式低暂停收集器

又叫什么火车式回收,完成10万request用时153秒,配置如下:

$JAVA_ARGS.="-Dresin.home=$SERVER_ROOT-server  -Xms2048M-Xmx2048M-Xmn512M-XX:PermSize=256M -XX:MaxPermSize=256M-XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19-Xnoclassgc-Xloggc:log/gc.log  -XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+UseTrainGC";

该配置效果也不好,影响性能,所以没试。

七:相比之下,还是并发回收比较好,性能比较高,只要能解决ParNewGC(并行回收年轻代)时的promotionfailed错误就一切好办了,查了很多文章,发现引起promotionfailed错误的原因是CMS来不及回收(CMS默认在年老代占到90%左右才会执行),年老代又没有足够的空间供GC把一些活的对象从年轻代移到年老代,所以执行FullGC。CMSInitiatingOccupancyFraction=70表示年老代占到约70%时就开始执行CMS,这样就不会出现FullGC了。SoftRefLRUPolicyMSPerMB这个参数也是我认为比较有用的,官方解释是softlyreachableobjectswillremainaliveforsomeamountoftimeafterthelasttime
theywerereferenced.Thedefaultvalueisonesecondo
flifetimeperfreemegabyteintheheap,我觉得没必要等1秒,所以设置成0。配置如下

$JAVA_ARGS.="-Dresin.home=$SERVER_ROOT-server-Xms2048M  -Xmx2048M-Xmn512M-XX:PermSize=256M-XX:MaxPermSize=256M -XX:SurvivorRatio=8-XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19-Xnoclassgc-XX:+DisableExplicitGC  -XX:+UseParNewGC-XX:+UseConcMarkSweepGC  -XX:+CMSPermGenSweepingEnabled  -XX:+UseCMSCompactAtFullCollection  -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled-XX:-CMSParallelRemarkEnabled  -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0-XX:+PrintClassHistogram  -XX:+PrintGCDetails-XX:+PrintGCTimeStamps  -XX:+PrintGCApplicationConcurrentTime  -XX:+PrintGCApplicationStoppedTime  -Xloggc:log/gc.log";

上面这个配置内存上升的很慢,24小时之内几乎没有停顿现象,最长的只停滞了0.8s,ParNewGC每30秒左右才执行一次,每次回收约0.2秒,看来问题应该暂时解决了。

参数不明白的可以上网查,本人认为比较重要的几个参数是:

-Xms-Xmx-XmnMaxTenuringThresholdGCTimeRatioUse

ConcMarkSweepGCCMSInitiatingOccupancyFractionSoftRefLRUPolicyMSPerMB

eclipse中配置JVM参数:-Xmx1024M-Xms1000M-server-XX:PermSize=64M-XX:MaxPermSize=128m

上述就是小编为大家分享的JVM调优的几种策略分别是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

配置 参数 小时 策略 内存 性能 时间 系统 频繁 不好 错误 问题 年轻 差不多 内容 原因 垃圾 增量 对象 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州万易互联网科技有限公司 互联网科技行业发展 互联网科技logo设计 联恩商钥互联网科技有限公司 恒生科技互联网指数分析 农村开互联网科技讲堂 西藏七维空间互联网科技有限公司 深圳前海聚择互联网科技有限公司 互联网科技教育视频 贵州叶脉互联网科技有限公司所属行业 搜狐科技互联网 互联网科技研发水平 本届互联网博览会上的黑科技 恒生互联网科技业指数调整周期 互联网企业科技类企业如何做账 互联网科技实习生岗位 郑州欣桑互联网科技有限公司 互联网界的黑科技 互联网科技收购价值 科技互联网经济论坛 新华互联网科技学校 美国互联网科技巨头监管 互联网下的科技发展 互联网金融科技创新 无线互联网科技 互联网科技公司做什么 深圳市运趣互联网科技有限公司 广州优美互联网科技 银川新华互联网科技学校原画 瑞安市蟠桃会互联网科技有限公司
0