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

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

本期,边肖将为您带来一些关于JVM调优的策略。文章内容丰富,从专业角度进行分析和叙述。看完这篇文章,希望你能有所收获。

JVM的参数调优比较头疼,可能和应用有关,但是别人说的还行可能对自己没用。以下是我在JVM调优方面的实践经验,希望对读者有所帮助。环境是Linux AS 4,树脂2.1.17,JDK 6.0,2个CPU,4 G内存和dell2950服务器。

JVM调优

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

也就是默认配置,完成100,000个请求需要153秒。JVM参数的配置如下:

$爪哇_ARGS。='-dresin . home=$ SERVER _ ROOT-SERVER-xms 2048m-xmx 2048m-xmn 512m-Xx 3360 permsize=256m-Xx 3360 max permsize=256m-Xx : max teningringthreshold=7-Xx 33 360 gctimeratio=19-Xnoclassgc-xlogg c 3360 log/GC . log-Xx 3: print gcdetails-Xx : printgc时间戳';一般这种配置在树脂启动后24小时内似乎没有大问题,网站可以正常访问。但是查看日志后发现,FullGC在接近24小时的时候执行越来越频繁,每3分钟就有一次FullGC,每次FullGC系统都会暂停6秒左右。作为一个网站,用户等待6秒的时间可能太长了,所以这种方式需要改进。MaxTenuringThreshold=7表示如果一个对象在救援空间中移动了7次,并且没有被回收,那么这个对象就被放入老一代,GCTimeRatio=19表示java可以花费5%的时间回收垃圾,1/(1 ^ 19)=1/20=5%。

二:JVM调优之并行回收

完成100,000个请求需要117秒,配置如下:

$爪哇_ARGS。='-dresin . home=$ SERVER _ ROOT-SERVER-xmx 2048m-xms 2048m-xmn 512m-Xx 3360 permsize=256m-Xx 3360 max permsize=256m-Xnoclassgc-xlogc 3360 log/GC . log-Xx : print gcdetails-Xx : print gctimestamps-Xx : UseParallelGC-Xx : parallecthreads=20-Xx 33:回收我并行尝试过的各种组合配置,好像没什么用。启动约3小时后树脂会停止,时间会超过10秒。也可能是参数设置不够好的原因。Maxgpausemillis代表GC***暂停时间。树脂刚启动,FullGC未执行时,系统正常。然而,一旦FullGC被执行,Maxgpausemillis就没用了。暂停时间可能超过20秒。我不在乎之后会发生什么。快速重启树脂,尝试其他回收策略。

三:JVM调优之并发回收

完成100,000个请求需要60秒,这几乎是并行回收的两倍,是默认回收策略性能的2.5倍。配置如下:

$爪哇_ARGS。='-dresin . home=$ SERVER _ ROOT-SERVER-xms 2048m-xmx 2048m-xmn 512m-Xx 3360 permsize=256m-Xx 3360 max permsize=256m-Xx : useconCmarksweepgc-Xx : maxteneringthreshold=7-Xx 3360 gctimeratio=19-Xnoclassgc-xlogc 3360 log/GC . log-Xx : print gcdetails虽然这种配置不会在10秒内断开,但重启约3小时后,系统每隔几分钟就会在5秒内断开。查看gc.log,发现在执行ParNewGC的时候有一个promotionfailed错误,所以转到FullGC,导致系统停止,而且会非常频繁,每几分钟一次,需要改进。UseCMSCompactAtFullCollection是一个在执行FullGC后整理和压缩内存以避免内存碎片的表。CMSFullGCsBeforeCompaction=N表示在执行了N次FullGC后,内存被压缩。

四:JVM调优之增量回收

/p>

完成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调优的几种策略分别是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/44233.html

(0)

相关推荐

  • 怎样分析图数据库

    技术怎样分析图数据库怎样分析图数据库,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。下面主要讨论图数据库背后的设计思路、原理还有一些适用的场景,以及在生产环境

    攻略 2021年12月2日
  • isemodelsim仿真步骤(ise如何使用modelsim仿真)

    技术怎么进行ModelSim独立仿真ISE的仿真工程本篇文章为大家展示了怎么进行ModelSim独立仿真ISE的仿真工程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。详细操作步骤

    攻略 2021年12月22日
  • Python如何将数字转化成列表

    技术Python如何将数字转化成列表小编给大家分享一下Python如何将数字转化成列表,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. digitizedef digitize(n):
    retur

    攻略 2021年11月11日
  • 抖音播放量怎么刷,怎么能让抖音粉丝暴涨?

    技术抖音播放量怎么刷,怎么能让抖音粉丝暴涨?最近关于到抖音的问题,小编被大家问的最多的就是抖音刷播放量有效果吗?因为目前大家都有所耳闻,就是关于抖音上视频要是想火起来,被上到推荐上的话,那么就需要进行刷播放量,所以抖音刷

    测评 2021年10月20日
  • HTML5 Flash视频flv播放器有什么功能

    技术HTML5 Flash视频flv播放器有什么功能这篇文章主要介绍“HTML5 Flash视频flv播放器有什么功能”,在日常操作中,相信很多人在HTML5 Flash视频flv播放器有什么功能问题上存在疑惑,小编查阅

    攻略 2021年11月12日
  • 抖音3元1000粉,抖音花3元能买多少粉丝?

    技术抖音3元1000粉,抖音花3元能买多少粉丝?试着去挑选那些能吸引别人眼球的封面,让更多的抖友点入你的视频,查看你的视频.太普通的封面可能会让观众在众多作品中忽略掉,而更多的则是无法通过双击和评论来分享,因此说好的封面

    测评 2021年10月21日