内存溢出解决思路

内存溢出问题解决思路

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

开始了。

项目报错什么错呢?

  java.lang.OutOfMemoryError: Java heap space

  java.lang.OutOfMemoryError: GC overhead limit exceeded

报错的业务功能是:

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

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

当时背景是:

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

于是我分析:

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

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

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

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

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

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

原文地址:https://www.cnblogs.com/one-gril/p/11614237.html

时间: 2024-11-14 10:45:59

内存溢出解决思路的相关文章

Webloginc 内存溢出解决方法

  Webloginc 内存溢出解决方法  : javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space 解决方法: 1.在base_domain 域下找到startWebLogic.bat 文件,然后打开编辑, 2.然后加入以下的代码 JAVA_OPTS='-Xms512m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=25

MyEclipse内存溢出解决方法

MyEclipse内存溢出解决方法 1.修改eclipse.ini 在Myeclipse安装目录下G:\MyEclipse8.5\Genuitec\MyEclipse 8.5有一个myeclipse.ini配置文件,设置如下: -vmargs-Xmx512m-XX:MaxPermSize=256m-XX:ReservedCodeCacheSize=64m 2.设置Default VM Arguments 在myEclipse中,打开Windows-> Preferences->Java->

linux中tomcat内存溢出解决办法

用命令 tail -f /root/apache-tomcat-6.0.20/logs/catalina.out(需要找到tomcat路径) 查看日志,查看是否有错误 linux中tomcat内存溢出解决办法 常见的一般会有下面三种情况:1.OutOfMemoryError: Java heap space2.OutOfMemoryError: PermGen space3.OutOfMemoryError: unable to create new native thread.前两种通常一起进

Android 导航(介绍)页面ViewPager内存溢出解决方法

现在基本每个Android App都会标配一个启动介绍的页面,或做产品介绍,或做app功能展示,既然起导航界面,基本思路就是用ViewPager实现.(图片引自UI中国一设计师的设计图片) 正好这几天在做这个导航界面,我的测试手机是魅族MX3,做完之后测试还行,没有明显卡顿的现象,但是当我把debug的apk装到米3和魅蓝上时,程序运行到这个导航界面会马上crash掉,偶尔没有crash也会出现明显的卡顿现象,体验效果非常差. 打开Android Studio的内存管理器查看运行时分配内存,当时

Tomcat内存溢出解决办法

使用Java程序从数据库中查询大量的数据时出现异常:java.lang.OutOfMemoryError: Java heap space在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息.JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等

java 大数据处理之内存溢出解决办法(一)

http://www.cnblogs.com/a757956132/p/4644910.html http://my.oschina.net/songhongxu/blog/209951 一.内存溢出类型 1.java.lang.OutOfMemoryError: PermGen space JVM管理两种类型的内存,堆和非堆.堆是给开发人员用的上面说的就是,是在JVM启动时创建:非堆是留给JVM自己用的,用来存放类的信息的.它和堆不同,运行期内GC不会释放空间.如果web app用了大量的第三

weblogic10内存溢出解决方法

在开发过程中经常会遇到weblogic内存溢出问题,用下面的办法解决了. 找到domain/bin下的setDomainEnv.cmd文件,里面可以找到以下四行代码,将值该打一倍,重启服务. set MEM_PERM_SIZE_64BIT=-XX:PermSize=128m set MEM_PERM_SIZE_32BIT=-XX:PermSize=48m set MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=256m set MEM_MAX_PERM_SIZE_

android文件缓存,并SD卡创建目录未能解决和bitmap内存溢出解决

1.相关代码: 加入权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> /** 获取SD卡路径 **/ private static String getSDPath() { St

JVM:内存监视手段及各区域内存溢出解决

转载请务必注明出处: jiq?钦's technical Blog - 季义钦 引言 本文仅关注一些常见的虚拟机内存监视手段,以及JVM运行时数据区各个部分内存溢出的发生和对应的解决方案,总体来说属于概括性总结,涉及相对不是很深入,目的是让自己和其它初学者有一个框架性.概念性的了解,当遇到问题时有迹可循.不至于不知所措. 一.虚拟机内存监视手段 虚拟机常出现的问题包括:内存泄露.内存溢出.频繁GC导致性能下降等,导致这些问题的原因可以通过下面虚拟机内存监视手段来进行分析,具体实施时可能需要灵活选