常用命令
JPS查询JAVA进程
Jmap -heap pid 查看堆内存信息
jstack PID 查看死锁信息
JVisual Vm线程dump也可以查看死锁信息
jinfo -flags pid 查看配置启动参数
jinfo -sysprops pid查看系统参数
jstat 查看堆相关信息
jstat -gc pid查看堆相关信息
s0c: s0区域大小(Kb) s1c: s1区域大小(Kb)
s0u: s0区域使用情况 s1u: s1区域使用情况
ec: Eden区域大小 eu:Eden区域使用情况
oc:老年代大小 ou:老年代使用大小
mc:元空间大小 mu:元空间使用情况
ccsc:压缩类空间大小 ccsu:压缩类使用情况
YGC:年轻代回收次数 YGCT:年轻代回收耗时 (单位:s)
FGC:FullGC次数 FGCT:FullGC耗时
GCT:GC耗时总时间
内存增长速率评估思路
第一步,查看年轻代对象增长速率,根据jstat -gc pid 1000 100 监测线程,查看每秒eden区域增长的大小。
第二步,查看YGC出发频率和每次耗时,通过Eden区域每次增长的大小预估出YGC发生时间,YGCT/YGC 可以查看系统会因为YGC卡顿时间。
第三步,计算每次YGC有多少对象进入老年代,通过上面预估YGC发生的频率,比如3分钟发生一次YGC, 使用jstat -gc 3*60*1000 10 监测近10次YGC数据情况,观察Eden s0 s1和老年代每次增长的大小,推算出平均一次YGC会有多少对象进入老年代。
第四步,根据老年代的增长速率就可以推算出FullGC发生的时间,通过FGCT/FGC计算FGC平均耗时。
优化思路:尽量避免FullGC,让每次YGC后存活的对象尽量少于Survivor区域50%