1、记得配置启动参数,否则神仙难救
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/web/oms.xxx.cn/java
2、tomcat日志,找到指定时间范围内,最早的一处提示
java.lang.OutOfMemoryError: Java heap space
-- 找到
/opt/web/qa.xxx.cn/java/java_pid32710.hprof ...
3、下载文件,利用JPorfiler解析
排个序:
4、代码分析。如上图,如此均匀,应该是遍历。
List<xxx> insurenceDetails = xxx.selectBeforeMonth("2021-03-01 00:00:00", DateUtil.formatDate(new Date(), DateUtil.YYYYMMDD_HHMMSS));
if(Check.notNull(insurenceDetails)){
for (InsurenceDetail insurenceDetail : insurenceDetails){
JSONObject dataInfo = new JSONObject();
dataInfo.put("orderNo", insurenceDetail.getOrderNo());
ActiveMQManager.getProducer(Constant.getKey("xxx")).sendMessage(JSON.toJSONString(dataInfo));
}
}
几百万的数据,在这里循环。果然。哈哈
关于代码分析,也是重点。
要分析出现的特点,比如我这的。第一个,第二个就是其他的代码。但是从第三个开始,到第.....,可以发现,都是同一处代码。
因此,一般来说,这种情况都是在遍历的时候导致的。
如上,参考。
上一次的捉鬼:
记录一次内存溢出_org.apache.xmlbeans.impl.store.xobj$attrxobj-CSDN博客