dump分析
激活码:L-qOQRsFcEcF-LqVM1lqxQm#1437
0.使用工具JProfiler载入dump.hprof文件
1.首先打开Biggest Objects,看到一个6G的ArrayList,明显有问题
2.右键之,选择Use Selected Instances,然后下拉框选择Outgoing references
3.展开发现其长度达到四千万,且都是相同数组元素
故认定这是个填报的笛卡尔积问题
4.再寻找引用,选择Incoming reference,点击Show Paths To GC Root
可以发现是线程 http-apr-8080-exec-55 的栈的引用
5.点击Go To Start
6.依次选择如图选项,选择http-apr-8080-exec-55线程,点击Calculate inspection and create a new object set
7.再次选择Outgoing reference,然后ctrl+F搜索ReportSessionIdInfo
8.找出问题模板,可以从模板设计和填报数据两个方面分析
9.结论
考虑是填报时的输入数据有误,当数据库记录中有多条记录的某个字段相同,例如上面的id有重复,当把这个字段作为单元格值的过滤条件时,单元格会有多个值,数据的过滤关系丢失,填报时计算笛卡尔积占用过多内存资源导致宕机。