内存溢出解决思路

内存溢出问题解决思路

 

这篇文章主要说下解决思路,当然也写出了对应的业务背景。用意呢,一是想记录问题处理过程,作为以后的经验;二呢,分享给大家,可以听听故事借鉴下。

开始了。

项目报错什么错呢?

  java.lang.OutOfMemoryError: Java heap space

  java.lang.OutOfMemoryError: GC overhead limit exceeded 

报错的业务功能是:

  导出数据为加密的EXCEL文档。

  也就是 把10万条数据从数据库读出来,放到excel表格中,再放到内存中,对表格进行加密处理,最后返回文件流。

扫描二维码关注公众号,回复: 7400592 查看本文章

当时背景是:

  本地idea运行没问题,部署到服务器却出现上面的内存溢出ERROR

于是我分析:

  方向一:程序代码有问题,对象创建太多。10万行*5=50万个单元格对象,可能是多了。于是用分页查询数据的方式,10万条数据分为20次,即每次查询5000条数据,分批放进sheet对象中。然而这样做并没啥卵用。

  方向二:JVM扩容。把原来启动参数-Xms256M -Xmx512M,扩大到7681024,于是问题解决了,不报内存溢出了。

      但是!治标不治本,这个程序的内存是扩大了,但有可能影响别的程序正常使用。

      于是再百度搜各种poi内存溢出问题”,终于找着内存溢出的根本原因了。原来,是我用的POI版本太低了,高版本POI已经解决了内存溢出的问题,即通过限定内存中到达一定行数时清空内存的方式。

  原来一直用的百度关键字要么是“java.lang.OutOfMemoryError”,要么是“GC overhead limit exceeded”,而换个关键词“poi内存溢出问题” 去搜索,答案 早已有前辈po出。

总结一下,遇到问题,要多方面考虑原因,然后根据可能的具体原因去百度搜,不然就像大海捞针。

猜你喜欢

转载自www.cnblogs.com/one-gril/p/11614237.html
今日推荐