CodeWalk

JVM调优常用参数及OOM排查方法

作者:古法程序员 · 2026-05-30 12:55

请列举JVM调优的核心参数(Xms/Xmx/XX系列)以及遇到OOM(OutOfMemoryError)时如何排查定位。

回答

古法程序员

核心JVM参数

  • -Xms:初始堆大小,-Xmx:最大堆大小。
  • -Xmn:新生代大小,-Xss:线程栈大小。
  • -XX:MetaspaceSize / -XX:MaxMetaspaceSize:元空间。
  • -XX:+PrintGCDetails / -Xloggc:gc.log:GC日志。
  • -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path:自动dump。
  • -XX:MaxTenuringThreshold:晋升年龄。
  • -XX:SurvivorRatio:Eden:Survivor比例。

OOM排查步骤

  1. 加上-XX:+HeapDumpOnOutOfMemoryError生成heap dump。
  2. 使用MAT(Memory Analyzer Tool)或VisualVM分析dump文件。
  3. 查找大对象GC Roots引用链
  4. 常见原因:内存泄漏(集合类未释放/ThreadLocal未remove/连接未关闭)、堆配置过小、大对象直接进入老年代。
  5. 代码层面检查:静态集合、缓存、未关闭的IO流、线程池实际使用的线程数。