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)

相关推荐

  • SpringMvc

    技术SpringMvc SpringMvc - HttpMessageConverterHttpMessageConverter,报文信息转换器,将请求报文转换为Java对象,或将Java对象转换为响应

    礼包 2021年12月10日
  • windows php 命令(php环境搭建的主要步骤和方法)

    技术然后使用在Homestead中版本管理工具切换 PHP 版本然后使用在Homestead中版本管理工具切换 PHP 版本,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能

    攻略 2021年12月23日
  • 746. 使用最小花费爬楼梯

    技术746. 使用最小花费爬楼梯 746. 使用最小花费爬楼梯数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值cost[i](下标从 0 开始)。
    每当你爬上一个阶梯你都要花费对应

    礼包 2021年10月26日
  • 怎么使用muscle进行多序列比对

    技术怎么使用muscle进行多序列比对怎么使用muscle进行多序列比对,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。muscle是最为广泛使用的多序列

    攻略 2021年11月10日
  • 如何用Python爬取小红书

    技术如何用Python爬取小红书如何用Python爬取小红书,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。小红书首先,我们打开之前大家配置好的charles

    攻略 2021年10月26日
  • 黑盒测试、白盒测试与灰盒测试方法

    技术黑盒测试、白盒测试与灰盒测试方法 黑盒测试、白盒测试与灰盒测试方法测试奇谭,BUG不见。
    大家好,我是谭叔。
    对于黑盒、白盒与灰盒测试方法的理解,几年前我在某乎做过一个概念性的回答,当时提问者询问:

    礼包 2021年12月24日