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)

相关推荐

  • html盒子模型由什么组成(html盒子模型具有哪些内容)

    技术html的盒子模型有哪些本篇内容主要讲解“html的盒子模型有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“html的盒子模型有哪些”吧!

    攻略 2021年12月23日
  • zookeeper的架构及应用场景(zookeeper类似的框架是什么)

    技术zookeeper框架是怎样的呢zookeeper框架是怎样的呢,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。先一句话概括下zookeeper:zook

    攻略 2021年12月24日
  • 张字组词有哪些,第二个字是“张”字的成语有哪些

    技术张字组词有哪些,第二个字是“张”字的成语有哪些大张其词 张字组词有哪些;大张旗鼓 ;大张声势 ;大张挞伐 ;东张西望 ;范张鸡黍 ;急张拘诸 ;铺张浪费 ;铺张扬厉

    生活 2021年10月26日
  • 如何进行CVE-2017-16943-进出口-UAF脆弱性分析

    技术怎么进行CVE-2017-16943-Exim-UAF漏洞分析本篇文章为大家展示了怎么进行CVE-2017-16943-Exim-UAF漏洞分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希

    2021年12月20日
  • oracle归档日志流式分析(oracle执行语句分析)

    技术Oracle查询脚本的示例分析这篇文章将为大家详细讲解有关Oracle查询脚本的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 --查询回滚段信

    攻略 2021年12月20日
  • php simplexml如何修改数据

    技术php simplexml如何修改数据本篇内容介绍了“php simplexml如何修改数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔

    攻略 2021年10月26日