JVM
思维导图
常用命令
# dump堆内存
jmap -dump:format=b,file=<filePath> <pid>
jmap -dump:format=b,file=app.hprof 45
#查看GC情况
jstat -gcutil <pid> 1s #每1秒打印gc基本信息
jstat -gc 45 250 10 #每250毫秒打印Java进程45的gc详细信息,一共打印10次
jstat -class 45 #查看类加载信息
JVM必备调优参数
-XX:+UseConcMarkSweepGC #设置垃圾回收器为CMS(Java8默认新生代为PS,老年代为SerialOld)
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof #设置oom时自动dump堆
# 打印gc log
-XX:+PrintGCDetails -Xloggc:/Users/abner/Downloads/jvm-gc.log
-Xmx1g -Xms1g #稳定堆大小,避免启动时触发过程fullGC
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m #稳定元空间大小,避免启动时触发过程fullGC(默认才几十M)
##配置gc日志详情
-XX:+PrintGCDetails
## 配置引用gc耗时
-XX:+PrintReferenceGC
## 中文释义:尽可能启用并行引用处理
## 使用方法:通过-XX:+ParallelRefProcEnabled开启,或者-XX:-ParallelRefProcEnabled关闭
JVM内存结构
参考
https://tech.meituan.com/2020/11/12/java-9-cms-gc.html (常见oom问题分析) https://www.cnblogs.com/jmcui/p/12051328.html (参数使用手册)