一次查内存泄露

Posted jason-koo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一次查内存泄露相关的知识,希望对你有一定的参考价值。

最近项目在进行对外测试,在服务器上线几个小时后,内存飙到了5.8G(预期2G),JVM一直在GC。

由于现场太大(dump有6G左右)和网络条件不理想,我们边下载dump边开着自己的测试服务器来模拟少量玩家游戏并且通过图形化工具来监视内存中的重量级对象,如玩家、场景等。最后在发现玩家缓存过期清空后,玩家的实例对象一直都没有被GC掉,然后通过工具找出了两个主要的内存泄漏点:

  1. 对象池中的对象回收后还一直持有玩家对象的强引用。
  2. 一些定时器的生命周期超出了持有者的生命周期,一直持有者玩家对象的强引用并且该定时器一直没有严格按照生命周期进行管理。

最后,我觉得在业务频繁更改的情况下一定要保持好对业务对象的封装,按照严格的生命生命周期去使用,不然代码没有健壮性,改一个Bug然后生产100个新Bug。

以上是关于一次查内存泄露的主要内容,如果未能解决你的问题,请参考以下文章

内存泄露与内存溢出

一次Kafka内存泄露排查经过

一次.net托管内存泄露分析

Android 内存泄露

内存相关内容

内存泄露与内存溢出的区别