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

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

整体思路:

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

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


  1. JVM内存不要设置的太大

    虽然建议堆的最大值设置为可用内存最大值的80%(使用命令free或cat /proc/meminfo查看,实际可用物理内存=free+buffer+cache),但是当我设置了80%之后,服务器的内存占用一般都达到了90%以上,超过了Grafana中我设置的Alert值80%。

  2. 把年轻代的大小设置的稍微小点

    -Xmn:设置堆内存中的年轻代大小,剩下的为年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8

    -XX:NewRatio:表示年轻代与年老代的比值,去掉-Xmn这个参数后,默认使用这个参数,比值是2,也就是年轻代占1/3

    以上两个参数都可以设置年轻代的大小,可以看出,一般来说,年轻代占据整个堆的1/3左右

      那么,如果我把年轻代的空间设置的再小一点,比如设置成整个堆的1/4或1/5,会怎么样呢?

      理论上来说,如果年轻代的空间越小,那么Eden区越容易满,因为Young GC是作用于年轻代的,那么Young GC就会被触发的越频繁(频繁是正常现象),同时,空间越小,单次执行的时间就会越短;同时,如果年轻代的空间越小,那么留下给年老代的空间就会越大,那么年老代就越不容易满,就越不容易触发Full GC,这样是不是就满足了整体思路中说的:尽可能让Young GC单次执行时间少点,并让Full GC发生的频率不应该太高??


猜你喜欢

转载自blog.51cto.com/11009785/2400160