产品:叮(一份execl传送过来),这是今天要清洗的数据。我:嗯????什么情况???产品:之前新增一个字段,需要将历史数据补充完毕我:我在开发需求产品:好的,今天洗完我:........我洗!于是今
- 产品:叮(一份execl传送过来),这是今天要清洗的数据。
- 我:嗯????什么情况???
- 产品:之前新增一个字段,需要将历史数据补充完毕
- 我:我在开发需求
- 产品:好的,今天洗完
- 我:........我洗!
于是今日写好数据清洗程序之后,就让运维小哥跑一下,在清洗过程中出现了OOM
的异常情况。然后让运维小哥哥将对应的线程栈信息以及内存信息dump
下来。
先说明发生OOM
的可能原因:
- outOfMemoryError 年老代内存不足。
- outOfMemoryError:PermGen Space 永久代内存不足。
- outOfMemoryError:GC overhead limit exceed 垃圾回收时间占用系统运行时间的98%或以上。
在这里我们就要结合代码,观察是否大量应该被回收的对象在一直被引用或者是否有占用内存特别大的对象无法被回收。
问题展示
时间戳 [http-nio-端口号-exec-1] ERROR ResponseExceptionHandle:26 - Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceededorg.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceeded ****中间一大段****Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
这个时候要是有可视化界面就好了(或者拥有运维的电脑,自己用Arthas
上去
