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)

相关推荐

  • 区块链需要学javascript吗(javascript编写区块链)

    技术如何用JS构建你自己的区块链如何用JS构建你自己的区块链,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言区块链太复杂,那我们就讲点简单的。用JS来

    攻略 2021年12月14日
  • Java 线程池中的线程复用是如何实现的

    技术Java 线程池中的线程复用是如何实现的Java 线程池中的线程复用是如何实现的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前几天,技术群里有个群

    2021年11月15日
  • what是什么意思中文,whatsupman什么意思

    技术what是什么意思中文,whatsupman什么意思意思是:喂what是什么意思中文,伙计,最近怎样。What s up近来如何
    1、What` s up with this window, dude?
    这窗有什么

    生活 2021年10月24日
  • 端口扫描工具Pscan怎么用

    技术端口扫描工具Pscan怎么用这期内容当中小编将会给大家带来有关端口扫描工具Pscan怎么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。今天给大家介绍一款端口扫描工具Pscan一、

    2021年12月10日
  • oracle 11.2.0.4 path 26925576 报错怎么办

    技术oracle 11.2.0.4 path 26925576 报错怎么办本篇文章给大家分享的是有关oracle 11.2.0.4 path 26925576 报错怎么办,小编觉得挺实用的,因此分享给大家学习,希望大家阅

    攻略 2021年11月12日
  • C++代码怎么优化

    技术C++代码怎么优化这篇文章主要讲解了“C++代码怎么优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++代码怎么优化”吧!使用模板的特化或者偏特化技术可以指定在使

    攻略 2021年11月30日