当前位置 博文首页 > 韩超的博客 (hanchao5272):记一次服务频繁崩溃的JVM调试过程
jps -v
获取启动参数[root@11.11.11.11 services]# jps -v |grep -v Jps
17 jar -Xmx8192m -Xms8192m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xloggc:/home/services/serviceA/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps
可知:
多次获取的类实例直方图都如下:
[root@11.11.11.11 services]# jcmd 17 GC.class_histogram |head -n14
17:
num #instances #bytes class name
----------------------------------------------
1: 10474 238943216 [B
2: 791538 18996912 java.lang.Long
3: 113599 11892216 [C
4: 187962 7518480 pers.hanchao.serviceA.vo.InfoNode$AreaNode
5: 187962 6014784 pers.hanchao.serviceA.vo.InfoNode
6: 187962 6014784 pers.hanchao.serviceA.vo.InfoNode$AgeNode
7: 187962 6014784 pers.hanchao.serviceA.vo.InfoNode$TierNode
8: 21172 5554168 [Ljava.lang.Object;
9: 187962 4511088 pers.hanchao.serviceA.vo.InfoNode$DeviceNode
10: 187962 4511088 pers.hanchao.serviceA.vo.InfoNode$GenderNode
有一次特殊的类实例直方图如下:
num #instances #bytes class name
----------------------------------------------
1: 72606461 4369167240 [C
2: 72602667 1742464008 java.lang.String
3: 24025 379820216 [Ljava.lang.Object;
4: 65562 245431048 [B
5: 868181 20836344 java.lang.Long
6: 187962 7518480 pers.hanchao.serviceA.vo.InfoNode$AreaNode
7: 187962 6014784 pers.hanchao.serviceA.vo.InfoNode
8: 187962 6014784 pers.hanchao.serviceA.vo.InfoNode$AgeNode
9: 187962 6014784 pers.hanchao.serviceA.vo.InfoNode$TierNode
10: 187962 4511088 pers.hanchao.serviceA.vo.InfoNode$DeviceNode
char[]
和String
类型占用了4369167240 + 1742464008
bytes,大概6GB内存,将近最大内存的75%,可能就是造成JVM的原因。根据上述突增的String实例情况,猜想可能产生问题的原因如下:
经排查,确实存在一个接口会因为传参不当,导致查询全表,并将全表记录读取到内存中。
修复接口,重新上线,问题解决。