解决 OOM 的初步思路:

  • OOM 的发生,一定是 JVM 某区域的对象太多,塞满了很多无法回收的对象;
  • 首先,需要知道到底是什么对象太多导致 OOM 的?
  • 然后,想知道什么对象太多导致 OOM,就需要一份 OOM 时的内存快照;
  • 怎么才能在 OOM 时自动 dump 一份内存快照?

(1) 在 OOM 的时候自动 dump 内存快照

  • JVM 启动参数添加如下内容:
    1. -XX:+HeapDumpOnOutOfMemoryError
    2. -XX:HeapDumpPath=/usr/local/app/oom