JVM调优经验(不一定准确)

1. 整体思路:

  1. Young GC发生的频率比较频繁是正常现象,但尽可能让他的单次执行时间少点

  2. Full GC发生的频率不应该太高

2. 使用的监控命令:

jps -m -l   列出JVM中运行的进程状态信息(这里可以获取某个进程的pid, 供后续命令使用)

jstat -gcutil pid 10s 3   对堆内存的使用情况、gc信息等进行实时的命令行统计

JVM调优经验(不一定准确)

3. 具体设置参数如下:

  1. -Xms、-Xmx

    这两个参数一定要设置,而且必须设置成相等,不能使用默认值。如果不设置,可能会出现频繁Full GC、内存泄露。

    设置成相等,主要是为了避免每次GC之后重新给堆内存分配大小。

    另外,这俩值不要设置的太大。虽然建议堆的最大值设置为可用内存最大值的80%(使用命令free或cat /proc/meminfo查看,实际可用物理内存=free+buffer+cache),但是当设置了80%之后,服务器的内存占用一般都达到了90%以上,所以可以适当降低一点。

  2. -Xmn、-XX:SurvivorRatio

    最好不要用-XX:NewRatio,因为同CMS GC一起使用时会失效。

    如果不设置此值,不设置CMS GC,那么年轻代和年老代比值大约是1:2

    如果不设置此值,设置了CMS GC,那么年轻代会变的很小,年老大占很大

    如果Young Generation大小分配不合理或空间比较小,这个时候导致对象很容易进入Old Generation中,比如,如果s0和s1太小,gc之后无法装下存活的对象,那么就会直接进入年老代中,而Old Generation中回收具体对象的时候速度是远远低于Young Generation回收速度。

    要考虑年老代和新生代的比例(sun官方建议-Xmn为整个堆的3/8),考虑Eden和survives的比例(默认是8:1:1)

    如果不知道该设置多少,可以先按官方要求设置,如果不合适,再进行调整。

  3. 是否使用CMS GC。

  4. 其他参数,根据具体情况设置,注意,未必设置了之后就会提升性能。不同的应用系统,不同的电脑硬件条件,都可能不一样。

原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/187242.html

(0)
上一篇 2021年11月5日
下一篇 2021年11月5日

相关推荐

发表回复

登录后才能评论