JVM GC 开销过高
接口延迟周期性抖动,CPU 使用率高但业务线程不忙,日志出现 GC overhead limit exceeded 或长停顿;监控显示 GC 次数和停顿时间明显上升。
jstat -gcutil <PID> 1000 10
jcmd <PID> GC.heap_info
jcmd <PID> GC.class_histogram
开启 GC 日志(JDK 9+):
-Xlog:gc*:file=/var/log/app/gc.log:time,uptime,level,tags
查看容器内存限制和堆设置:
cat /sys/fs/cgroup/memory.max
jcmd <PID> VM.flags | grep -E 'MaxHeapSize|InitialHeapSize'
-Xmx 不匹配,频繁 Full GC。-Xms/-Xmx,容器内使用 -XX:MaxRAMPercentage。MaxGCPauseMillis。jcmd GC.class_histogram 和堆 dump 找大对象来源。jstat — GC 统计jcmd — 堆、线程和 VM 信息jmap — 堆 dumpasync-profiler — CPU/分配采样jvm-gc-overhead 常与 metaspace-oom、thread-deadlock 一起排查