JVM参数调优
背景
记录Linux下的OOM Killer和JVM参数调优的事项。
参数调优
OOM Killer
[1]
Linux下允许程序申请比系统可用内存更多的内存,这个特性叫Overcommit。这样做是出于优化系统考虑,因为不是所有的程序申请了内存就立刻使用的,当你使用的时候说不定系统已经回收了一些资源了。不幸的是,当你用到这个Overcommit给你的内存的时候,系统还没有资源的话,OOM killer就跳出来了。
参数/proc/sys/vm/overcommit_memory可以控制进程对内存过量使用的应对策略
- 当overcommit_memory=0 允许进程轻微过量使用内存,但对于大量过载请求则不允许,也就是当内存消耗过大就是触发OOM killer。
- 当overcommit_memory=1 永远允许进程overcommit,不会触发OOM killer。
- 当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区占整个新生代的十分之一