记一次内存溢出问题的代码排查
下午帮忙排查一个问题,邮件如下:
然后我就根据邮件里提供的方法,进行查看代码。
查看提供的四个方法后,发现另外三个方法都指向第一个方法,看来大概率是一个问题导致的,
心里暗喜。
熟悉了整个过程后,最后锁定问题出在“导出所有数据”。
这个项目在导出数据的dao层,进行查询数据的地方,对查询到的数据进行for循环操作,在for循环中,又对一个表进行了查询操作。查了一下for循环的数据量,最多的将近万条数据。
这样就对数据库造成了很大的压力,再看看前台界面,对导出全部数据也没有进行限制点击,可以在短时间内进行多次点击,多种不当之下,导致发生了以上问题。
通过这个问题,我们要注意,在使用for循环的时候要谨慎,for循环当中如果有对数据库有查询或者其他操作,要判断下数据量,或者在前台对一次操作进行限制,不要让用户重复操作,导致系统崩盘。