上周由于工作原因,公司安排写单元测试,开始都很顺利,但是随着写的测试案例越来越多,项目单元测试运行就特别卡,极端情况下内存溢出,因此进行了排查
首先内存溢出问题,首先能想到的导致内存溢出的原因
代码问题...,可能出现死循环,死锁,一次性加载过多数据,或者代码出现内存泄漏
项目单元测试的jvm设置本身就不够
一开始本人没有人使用任何工具排查,仅仅是排查了自己写的代码,首先如线程池进行排查,是否进行关闭,全局变量都搞成了局部变量...(局部变量会随着方法结束而自动销毁),以及是否加载了过多的数据(因为单元测试都是进行mock的数据库数据,基本不可能导致加载过多数据),再次运行还是会卡,最终导致内存泄露,但是看到下面报错
java.lang.OutOfMemoryError...,原因就差不多出来了,基本就是我们的JVM配置过小,在运行单元测试的时候,不断的有对象在新生代存活,而新生代170M,很快就满了,然后又进入了老年代,而老年代的内存也不到341M也很快满了,最终到gc回收的时候...,少了设置堆内存大小
maxHeapSize="2G"
然后设置之后,重新运行了一下单元测试,果然效果明显,不再发生内存溢出,也不是卡的一动不动了,然后我们又观察了一下内存情况,如下图
基本都是新生代来回进行复制进行垃圾回收