iOS 内存泄漏监测自动化

在 Android 上,Square 这家公司提供了非常有名的工具: leakcanary ,来帮助开发者们在日常开发过程中就能够发现内存泄漏。但在 iOS 上呢?在 Google 的时候,我发现了两个工具,一个是这篇文章将要翻译并介绍的 Facebook 开源的三件套,另一个则是国内微信阅读团队做的 MLeaksFinder 。

关于 MLeaksFinder 这里有两篇其官方提供的文章介绍:

简而言之,MLeaksFinder 使用了一个非常 tricky 的方法来检测内存泄漏:通常一个 UIViewController 在被 pop 之后将会很快被释放,假设在 pop 3 秒钟之后仍然没有被释放,则可以认为这个 UIViewController 存在泄漏的问题(其实类似的方案同样也可以在 Android 上实现,据我所知微信在早期就有类似原理实现的用在 Android 上的内存泄漏监测工具了)。在后续的更新版本中,MLeaksFinder 也依赖了 Facebook 的 FBRetainCycleDetector 来辅助判断内存泄漏是否是由循环引用引起的。

MLeaksFinder 的原理非常简单但有效,帮助我排查了 App 中存在的不少内存泄漏问题,而且对于整个应用基本零侵入,不需要做任何的配置与修改。不过缺点也在这里,因为如果要将其作为日常自动化的工具使用的话,我希望 MLeaksFinder 本身可以提供回调接口,以便在内存泄漏发生时我可以选择是弹出 Alert 提示开发者,还是通过后台上报的方式提交。当然,开源的好处在于可以修改源码满足自己的需求,后续也会向其提交 PR,完善这个非常精巧的项目。

Facebook 的工程师们其实早就已经将 iOS 的内存泄漏排查自动化了,并发布了一篇非常不错的文章来介绍其原理,以及开源了他们的三个工具套件。为了加深对 Objective-C 内存管理的理解以及对库的原理的了解,在文末,会有我对这全篇英文文章的翻译。

对于工程师而言,自动化的工具真的是排名前几的生产力。

如果不想看翻译的话,这里也提供一个大概的全文重点概览:

  • 三个开源工具:

    • FBRetainCycleDetector

      • 主要用于检测循环引用
    • FBAllocationTracker
      • 主要用于快速检测潜在的内存泄漏对象,并提供给 FBRetainCycleDetector 进行检测
    • FBMemoryProfiler
      • 可视化工具,直接嵌入到 App 中,可以起到在 App 中直接查看内存使用情况,并筛选潜在泄漏对象的作用
  • Facebook 的自动化:客户端自动监测 -> 上报服务端 -> 归类/筛选 -> 分发给指定人员 -> 处理内存泄漏
  • 未开源的部分在于服务端如何对上报的循环引用链进行归类与筛选,不过 Facebook 的工程师们在文中给出了他们自己的策略

https://www.ctolib.com/topics-104295.html

原文地址:https://www.cnblogs.com/feng9exe/p/10283601.html

时间: 2024-08-02 10:18:43

iOS 内存泄漏监测自动化的相关文章

Facebook 的 iOS 内存泄漏监测自动化实践

内存是移动设备上的共享资源,如果一个 App 无法正确地进行内存管理的话,将会导致内存消耗殆尽,闪退以及性能的严重下降. Facebook 的 iOS 版本的许多功能模块共用了同一份内存空间,如果其中的某一个模块消耗了特别多的内存资源的话,将会对整个 App 造成严重影响.举个栗子,当某个功能模块不小心造成了内存泄漏的时候,这个情况就很有可能会发生. 在 Facebook,我们有非常多的工程师同时在一个代码仓库下进行并行开发.内存泄漏是在开发过程中难以避免会遇见的问题.当内存泄漏发生时,我们就需

windows内存泄漏监测

之前使用vld检测内存泄露,有兴趣可以一观: http://blog.csdn.net/alex_my/article/details/11488805 控制台下,MFC未测试. 使用方法如下: #include <crtdbg.h>ifdef _DEBUGdefine new new(_NORMAL_BLOCK, __FILE__, __LINE__)endif void EnableMemLeakCheck(){     _CrtSetDbgFlag(_CrtSetDbgFlag(_CRT

iOS内存泄漏自动检测工具PLeakSniffer

http://www.cocoachina.com/ios/20160706/16951.html 本文授权转自MrPeak技术分享(公众号:MrPeakTech) 新款Objective-C内存泄漏自动检测工具PLeakSniffer,GitHub地址. 背景 前些天读到WeRead团队分享的一款内存泄漏检测工具MLeaksFinder,恍惚想起早些时候自己也有过编写这样一个小工具的想法,不知道由于什么原因把这事给忘记了.在仔细读过MLeaksFinder源码,了解实现思路之后,发现和自己最初

iOS 内存泄漏排查以及处理

使用Xcode7的Instruments检测解决iOS内存泄露 文/笨笨的糯糯(简书作者)原文链接:http://www.jianshu.com/p/0837331875f0 作为一名iOS开发攻城狮,在苹果没有出ARC(自动内存管理机制)时,我们几乎有一半的开发时间都耗费在这么管理内存上.后来苹果很人性的出了ARC,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是我们在开发过程中,由于种种原因,还是会出现内存泄露的问题.内存泄露是一个很严重的问题.下面就简单介绍下怎么使用Xcode7自带

LeakCanary 内存泄漏 监测 性能优化 简介 原理

GitHub:https://github.com/square/leakcanary Demo地址:https://github.com/baiqiantao/LeakCanaryTest.git 目录 目录简单使用更多介绍自定义 LeakCanary测试案例ApplicationMainActivity静态成员导致的内存泄漏单例导致的内存泄漏 简单使用 A memory leak detection 内存泄露检测 library for Android and Java. A small l

iOS 内存泄漏的检测方式

内存泄漏的检测方式: 一.静态检测方法 1)手动静态检测 使用XCode分析功能,Product->Analyze 2)自动静态检测 在项目的Build setting中,将Analyze During 'Build'设置为YES 二.动态检测方法 1)Instrument 工具检测 Leaks 2) 第三方的内存检测工具,如MLeaksFinder 三.析构方法dealloc打印 一般来说,在创建工程的时候,我都会在Build Settings启用Analyze During 'Build',

Android内存泄漏监测(MAT)及解决办法

http://ttlnews.blogspot.com/2010/01/attacking-memory-problems-on-android.html 这篇文章是2010年1月份写的,其中有些已经不适合现在的Android机制了 我将内存问题分为两种:OOM和堆栈溢出 一个Android进程可以分配的最大堆内存(heap memory)为 16M(现在各个定制版本的Android系统都不一样) 如果你将重复打开关闭一个Activity20次,就有可能出现内存溢出,那么在哪里内存溢出了,在哪里

一步步调试解决iOS内存泄漏

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

调试解决iOS内存泄漏

这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露,以及NSZombieEnabled设置的使用. 本文假设你已经比较熟悉Obj-C的内存管理机制. 实验的开发环境:XCode 4.5.2 1.运行Demo 先下载一个实现准备好的内存泄露的Demo吧:leak app 下载下来,打开运行,程序是一个寿司的列表,列出各种寿司卷.试着选择里面的几行,应该是选第二行的时候就崩溃了.崩溃截图: 在崩溃的地方断住了,知道crash的地方了,但是不知道具体crash的原因.