JVM调优常用参数及OOM排查方法
请列举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排查步骤:
- 加上
-XX:+HeapDumpOnOutOfMemoryError生成heap dump。 - 使用MAT(Memory Analyzer Tool)或VisualVM分析dump文件。
- 查找大对象和GC Roots引用链。
- 常见原因:内存泄漏(集合类未释放/ThreadLocal未remove/连接未关闭)、堆配置过小、大对象直接进入老年代。
- 代码层面检查:静态集合、缓存、未关闭的IO流、线程池实际使用的线程数。