JVM参数调优

  |   0 评论   |   0 浏览

背景

记录Linux下的OOM Killer和JVM参数调优的事项。

参数调优

OOM Killer

[1]

Linux下允许程序申请比系统可用内存更多的内存,这个特性叫Overcommit。这样做是出于优化系统考虑,因为不是所有的程序申请了内存就立刻使用的,当你使用的时候说不定系统已经回收了一些资源了。不幸的是,当你用到这个Overcommit给你的内存的时候,系统还没有资源的话,OOM killer就跳出来了。

参数/proc/sys/vm/overcommit_memory可以控制进程对内存过量使用的应对策略

  1. 当overcommit_memory=0 允许进程轻微过量使用内存,但对于大量过载请求则不允许,也就是当内存消耗过大就是触发OOM killer。
  2. 当overcommit_memory=1 永远允许进程overcommit,不会触发OOM killer。
  3. 当overcommit_memory=2 永远禁止overcommit,不会触发OOM killer。

JVM参数

日志相关

  • -XX:+PrintGCDetails:开启详细GC日志模式,日志的格式是和所使用的算法有关
  • -XX:+PrintGCDateStamps:将时间和日期也加入到GC日志中

参数相关

  • -XX:CMSInitiatingOccupancyFraction: 使用CMS作为垃圾回收,使用70%后开始CMS收集
  • -XX:CMSInitiatingPermOccupancyFraction:设置perm gen使用达到多少%比时触发垃圾回收,默认是92%
  • -XX:ParallelGCThreads:指定并行的垃圾回收线程的数量,最好等于CPU数量
  • -XX:MaxTenuringThreshold: 新生代中对象存活次数,默认15。
  • -XX:SurvivorRatio: Eden区与Subrvivor区大小的比值,如果设置为8,两个Subrvivor区与一个Eden区的比值为2:8,一个Survivor区占整个新生代的十分之一

参考

  1. Linux OOM机制分析
  2. 调试排错 - JVM 调优参数