“导出内存溢出”通常是指在导出大文件(Excel、CSV、PDF、数据库备份等)时,程序抛出 OutOfMemoryError 或内存占用暴涨导致服务崩溃。下面按排查思路 → 常见原因 → 解决方式系统说明。
java.lang.OutOfMemoryError: Java heap spacetop / jstat -gcutil表现
List<Data> all = dao.queryAll();排查
SELECT * FROM table(无分页)解决 ✅ 分页 / 游标导出
while (hasNext) {
List<Data> list = dao.queryPage(page++, size);
writer.write(list);
}
表现
XSSFWorkbook排查
new XSSFWorkbook()解决 ✅ 使用:
SXSSFWorkbook(流式)EasyExcel.write(output, Data.class)
.sheet("data")
.doWrite(queryIterator());
表现
排查
byte[] / Blob解决 ✅ 只查导出字段
SELECT id, name, time FROM table
表现
排查
OutputStream 是否 flush/closeByteArrayOutputStream解决 ✅ 使用流式响应
response.setContentType("text/csv");
PrintWriter pw = response.getWriter();
表现
排查
解决 ✅ 异步 + 任务队列 ✅ 导出文件生成后下载
jmap -histo:live pidjstacklog.info("export size={}", size)✅ 分页查
✅ 流式写
✅ 不缓存全量
✅ 异步+限流
✅ 监控导出耗时和内存
如果你愿意,可以告诉我:
我可以直接帮你定位到具体代码问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。