一.情况
本次接到订单导出的需求,订单表数据量巨大,目前数据库大约有几十万数据。导出时经常内存溢出,堆大小不够用,指定-Xmx后决定监控JVM内存变化。
简介:除了JDK自带的jinfo jtsatus jmap等自带监控工具,visualVM是一款图形化监控JVM堆、类、线程、CPU的工具。
二.思路与实现
思路:调用导出订单方法,实时监控本机堆内存变化。
实现:导出17W订单量,打开visualVM监控堆内存变化。可以看到CPU使用率变化,以及GC发生时间点和堆内存的变化,和消耗的堆峰值,消耗了大约800M内存。

导出90W订单量消耗了大约3g内存,必须优化。查询时间后看到使用的堆变大,因为此时查询对象映射为对应的实体耗费许多内存,用的excel,生成许多大对象。

三.总结
优化方案
1.使用CVS
2.分时间分量导出合成数据文件。
网友评论