记录一次工作中遇到堆内存溢出问题

首先事情的起因是写了一个查询列表的功能,自测没问题,上到测试环境也没事,但是过两天测试人员说报错了,必现的错误,我去看日子,发现是系统堆内存溢出了,然后呢,我就主要检查代码有没有递归循环呀,有没有过多地循环调用呀,进行了一些优化,然后就不报错了。可是呢,过两天又报错啦,还是OutOfMemoryError: Java heap space,堆溢出啦。然后就开始检查了。

首先在日子中发现了问题,代码在进行查询后将list结果进行整理,最后return前会打印日志显示list的数量,发现日志打印出了list的数量,说明拉取代码没有问题,是在返回的时候报错了。然后又仔细看日志,发现了一个类,是系统中的,进去后看,原来是响应结果加密的类,在加密过程中,使用了logger.info()将全量的list结果进行日志输出了,啊呀,很可能就是日志量过大,导致系统堆溢出。然后我就在研发环境想复现错误。

之前在测试环境,响应list中数量是55的时候就报错了。来到研发环境,响应结果list的数量是60,发现没问题=。=,啊呀,什么鬼啊。然后呢,我就去看看服务器的内存信息,发现研发环境剩余内存1200M,测试环境剩余内存500M,难道是这个原因吗?就是测试环境服务器的剩余内存过小,日志输出的时候,由于日志量大,导致了系统堆溢出吗?然后我就联系测试人员,我吧代码中日志输出的那一行注释了,让测试人员重启了测试环境。

测试环境重启后,发现系统不报错了。现在大致问题可以定位是由于测试服务器的剩余内存本就不多,日志输出量达到一定量的情况下,会导致堆内存溢出。

所以呢,我觉得就是日志输出的话,最好就是需要哪些信息就输出哪些,最好不要全量输出,不然查看日志的时候,满屏的刷啊刷,都不是我想看到了。

我在网上也查看了关于日志输出会不会导致内存溢出,发现也有人遇到这种情况,日志输出也是耗内存的。

最后呢,对于java内存呀,堆内存呀,还是需要多去了解了解,探究细致一点,便于日后工作呀。

你可能感兴趣的:(个人笔记,springboot)