线上环境内存溢出-OutofMemoryError
前言
公司线上环境,出现内存溢出异常,发生时,cpu占用360%。系统可用内存不足。
一、OutOfMemoryError是什么?
当 JVM 内存严重不足时,当堆内存(Heap Space)没有足够空间存放新创建的对象时,就会抛出 java.lang.OutOfMemoryError 错误。
二、实际情况(参考)
解决方案
针对大部分情况,通常只需要通过 -Xmx 参数调高 JVM 堆内存空间即可。
如果仍然没有解决,可以参考以下情况做进一步处理:
- 如果是超大对象,可以检查其合理性,比如是否一次性查询了数据库全部结果,而没有做结果数限制。
- 如果是业务峰值压力,可以考虑添加机器资源,或者做限流降级
- 如果是内存泄漏,需要找到持有的对象,修改代码设计,比如关闭没有释放的连接
1.实战
当数据量过大时,发现页面响应过慢,卡住
后台执行命令
top
键盘按(排序)
Shift + M
发现java程序 cpu 360% , 内存严重不足
立即查看日志
发现异常:OutOfMemoryError,仔细阅读,其中使用fastJson 方法parse解析数组发生内存溢出,并且指出异常发生的代码行,找到代码,根据经验,发现fastJson 解析的数组过大,导致内存溢出。需要优化代码
总结
工作中我们经常遇上类似的错误,解决方案根据情况而定,这里我们选择优化代码。因为代码是手里面的一个新人写的,逻辑可能欠缺一些考虑。这里做个记录