JVMJAVA

OOM 和 FGC异常排查

2019-02-13  本文已影响88人  黄靠谱

概述

OOM:

触发FGC的方法:

  1. 主动触发:System.gc()、命令触发(jmap -dump:live)、工具触发(jconsol)
  2. 老年代内存不足:真不足、预判不足、内存碎片、CMS 晋升失败、配置太小
  3. Perm区内存不足:加载太多的类、配置太小

OOM的排查

  1. 导致OutOfMemoryError异常的常见原因有以下几种:
  1. OutOfMemoryError: PermGen space
  1. OutOfMemoryError: Java heap space
  1. 常见代码引起的OOM的情况

常用JVM异常排查手段

  1. 监控工具的使用,自带的JConsole、visualVM的使用
  1. 常用命令:
  1. gc日志分析(启动的时候设置参数,生成gc日志,然后用工具分析gc日志,比如FGC的次数、YGC的次数等信息)

  2. 快照分析(可以通过工具、命令、或者启动参数配置获取到快照,然后利用工具分析)

FullGC触发的情况

  1. 老年代空间不足:

解决方案:调优时应尽量做到让对象在Minor GC阶段被回收

  1. Perm区满了:解决方案:调大Perm区的大小,或者代码中不要加载过多的class

  2. 代码调用 System.gc()。可以设置jvm参数,禁止程序调用这个方法。

  3. jmap -histo:live pid 暴力GC,直接用命令

  4. CMS的GC非常特殊,其它的SerialOld和Parallel Old回收器在老年代满了都是进行Full GC,而唯独CMS不是这样,CMS会定时检测老年代的占用比例,超过一定的比例就会触发老年代的GC。

上一篇 下一篇

猜你喜欢

热点阅读