一次查内存泄露

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

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

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

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

原文地址:https://www.cnblogs.com/jason-koo/p/8428753.html

时间: 2024-11-09 01:00:01

一次查内存泄露的相关文章

使用gc、objgraph干掉python内存泄露与循环引用!

Python使用引用计数和垃圾回收来做内存管理,前面也写过一遍文章<Python内存优化>,介绍了在python中,如何profile内存使用情况,并做出相应的优化.本文介绍两个更致命的问题:内存泄露与循环引用.内存泄露是让所有程序员都闻风丧胆的问题,轻则导致程序运行速度减慢,重则导致程序崩溃:而循环引用是使用了引用计数的数据结构.编程语言都需要解决的问题.本文揭晓这两个问题在python语言中是如何存在的,然后试图利用gc模块和objgraph来解决这两个问题. 注意:本文的目标是Cpyth

最新版 使用Xcode6.4 和Instruments、Leaks调试解决iOS内存泄露

分析内存泄露 最近用到内存泄露,查看以前的博客,方法不错,但操作时,步骤好多都找不到啦,不知道怎么操作.所以下面做了一个简单的例子 实验的开发环境:XCode 6.4 一.Analyze (shift+command+b) app不crash了,那看看有没有内存泄露.用XCode的Analyze就能分析到哪里有内存泄露 分析之后可以看到: 这里提示alertView没被释放,有内存泄露,那我们释放 [alertView release]; 再分析,这个问题解决了. 二.使用Instruments

Android内存泄露分析简要思路

工作中遇到挺多需要分析内存泄露问题的情况,现在大致简要写下思路,等之后时间相对比较充裕再进行补充. 1.明白内存泄露的判断依据? 个人总结为:持续增加,只增不减! 理解一下这8个字,配合几个命令和工具来确定一下你的应用是否存在内存泄露问题,这是很关键的,如果一开始就判断错误了,那么没有继续往下进行的理由. 命令如下: adb shell dumpsys meminfo 应用包名 [当然,比较粗略地话,可以用adb shell procrank] 这时候你可以看到一个内存使用情况表 而我们首先关注

Layer的内存泄露问题分析报告

[问题描述] home应用在运行monkey测试6个小时候,Native Heap增长到200MB,怀疑内存泄露. 我们可以动过dumpsys查看Native Heap的大小: $adb shell dumpsys meminfo com.miui.home Applications Memory Usage (kB): Uptime: 12929068 Realtime: 12929060 ** MEMINFO in pid 1393 [com.miui.home] ** Pss Privat

关于java内存泄露的总结--引用的类型:强引用,弱引用,软引用

今天面试了一家公司的java开发方面的实习生,被问到一个问题:如何处理java中的内存泄露问题,保证java的虚拟机内存不会被爆掉,当时其实觉得面试官的问题有点泛,所以也没有很好领会他的意思,答案也不是很准确,后来回去查了下资料,大概明白面试官要问的东西是什么(尴尬,才反应过来),然后,也特地简单总结下java内存溢出的相关内容,以备之后复习. 一.什么情况下会java内存泄露? java不是有GC吗?为毛还会内存泄露?之前我也一直以为,java有垃圾回收器在,估计内存泄露的情况一般不会发生吧?

go内存泄露case

用go写了一个守护进程程序:用于检测redis的存活状态并将结果写到zookeeper中,部署到redis机器上,对于每个redis实例会有一个goroutine每隔固定时间去检测其状态,由主goroutine负责信号处理等,再接收到信号时kill其他的goroutine.程序运行了一段时间发现,有些redis实例的对应zookeeper的信息不更新,通过日志发现对应redis的goroutine挂掉了.阅读源码发现貌似是zk的第三方库抛出一个非预期的异常导致. 为了解决这个问题,对逻辑重构:由

利用leaks模板分析app的内存泄露

虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在.所以了解原理很重要. 这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露,以及NSZombieEnabled设置的使用. 本文假设你已经比较熟悉Obj-C的内存管理机制. 实验的开发环境:XCode 4.5.2 1.运行Demo. 先下载一个实现准备好的内存泄露的Demo吧:leak app 下载下来,打开运行,程序是一个寿司的列表,列出各种寿司卷.试着选择里面的几行,应

使用新版Android Studio检测内存泄露和性能

内存泄露,是Android开发者最头疼的事.可能一处小小的内存泄露,都可能是毁于千里之堤的蚁穴.  怎么才能检测内存泄露呢?网上教程非常多,不过很多都是使用Eclipse检测的, 其实1.3版本以后的Android Studio 检测内存非常方便, 如果结合上MAT工具,LeakCanary插件,一切就变得so easy了. 熟悉Android Studio界面 工欲善其事,必先利其器.我们接下来先来熟悉下Android Studio的界面  PHPer月薪测试题 [点击进入] 看看自己工资拿少

解决iOS内存泄露

文章很好,摘自:http://www.codeceo.com/article/xcode-instruments-ios-memory.html 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在.所以了解原理很重要. 这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露,以及NSZombieEnabled设置的使用. 本文假设你已经比较熟悉Obj-C的内存管理机制. 实验的开发环境:XCode 4.5.2 1.运行Demo