java内存溢出代码出

java读取160M的文件总是内存溢出,求大侠们帮忙看下代码是否有问题

刚刚出炉的一个类,其实是写的hive的UDF。读取一个160M左右的文件,但是总是在读到9500行左右的时候报内存溢出。求大侠指导,3Q

Java OOM 毫无疑问是开发人员常见并且及其痛恨的问题,但是任何服务的开发都没法避免 OOM。 因此,OOM 的排查及定位是每个 Java 工程师都必备的技能。

服务使用 jetty 发布的,先来看一下我这个服务的启动参数:

下面就是使用工具分析这个 .hprof 文件来定位问题了。使用  来分析该文件,效果如下:

一开始可能没那么快找到问题,但是这个图已经很明显说明了问题,是 ArrayList 的内容太大,沾满了内存。但是你可能还不清楚具体那块代码导致,这个时候你可以点击那个 ArrayList 在左侧栏看 Attribute
然后一直鼠标右键 into 进去看里面的详情,最终是可以看内容的。

于是乎去找到问题代码,错误代码如下:

问题已经定位到,于是去了解了一下这个项目,该如何使用 stream 的方式来读取并写入文件流。然后发现,人家有一个  的实现。但是切割上其实是有问题的,因为拿到一批 bytes 之后,直接转成了 string 并用分隔符分割,
奈何内容里面有中文,出现乱码了。

主要描述了分析问题的思路和方向,问题都大同小异,OOM 总会有原因的,有原因肯定可以找到并解决。MAT 这个分析工具很实用,内容很详细。以前遇到 OOM 问题都是重启服务,治标不治本,还是要多分析问题并解决。

space错误情况。还有导出excel也是一样的错误。网上找了很多关于tomcat内存参数设置和jdk的vm设置还是无效,昨天弄了一天还是无法解决,在好多群里问了,也没有人能提供好的解决方法。所以上到网站想请教大神们寻找解决方案。此问题网上找遍了方法还是无法解决。


我要回帖

更多关于 java内存溢出代码 的文章

 

随机推荐