深入了解iOS内存(WWDC 2018)笔记-内存诊断

主要记录下用于分析iOS/macOS 内存问题的笔记。

主要分析命令: vmmap, leaks, malloc_history

一:前言

有 3 种思考方式

  • 你想看到对象的创建吗?
  • 你想要查看内存中引用对象或地址的内容吗?
  • 或者你只是想看看 一个实例有多大?

如果你在进程启动时 启用了 malloc 堆栈日志记录, 那么 malloc_history 可以帮助你查找 该对象的回溯。

如果你只是想看看 在内存中引用对象的内容。 你可以使用 leaks 和在内存页面中 提供的其他工具来帮助你 。

最后 如果你只是想了解 一个区域或一个实例有多大 vmmapheap 是首选工具 作为起始点。

我建议在进程的 Memgraph 上 运行带有 -summary 命令的 vmmap 然后顺着线程继续进行.

二:准备

勾选Malloc Statck Logging ,这样 malloc_history 才有效果。

xcode 导出 .memgraph

三:命令

vmmap

  • vmmap --summary app.memgraph
    dirty sizeswapped size 才是我们需要关注的内容
    dirty size 代表脏内存大小,我们app希望脏内存越小越好,最好都是clean内存
    swapped size iOS 中代表 压缩的内存
    app 使用的总内存一般为 = dirty size + swapped size
  • vmmap --page app.memgraph | grep '.dylib'
    对上面的内容只 看 '.dylib' 动态库

leaks

  • leaks app.memgraph 命令查看无根内存,代表这不能被释放的无根内存(macOS适用)
  • leaks -traceTree 0x000000014b9b4000 PlanetPics.memgraph

heap

  • heap App.memgraph 查看堆对象
  • heap App.memgraph -sortBySize 按分配的大小排序,找出内存最大的那个元素,比如NSConcreteData
  • heap App.megraph -addresses all | ‹classes-pattern> 直接查找上一步NSConcreteData的具体数据 heap App.megraph -addresses NSConcreteData

malloc_history

  • malloc_history app.memgraph [address] 找到上一步的有问题的其中一个地址,进行堆栈跟踪
    leaks -traceTree 0x000000014b9b4000 PlanetPics.memgraph
  • malloc_history PlanetPics.memgraph --fullStacks 0x000000014b9b4000

四: Xcode 查看内存泄露

双击app.memgraph 打开Xcode后,

点击筛选可以单独查看内存泄露的内存

链接: https://developer.apple.com/wwdc18/416

相关推荐
wqfhenanxc2 分钟前
Mixing C++ and Rust for Fun and Profit 阅读笔记
c++·笔记·rust
豆沙沙包?1 小时前
8.学习笔记-Maven进阶(P82-P89)
笔记·学习·maven
Ya-Jun5 小时前
常用第三方库:flutter_boost混合开发
android·flutter·ios
刘婉晴8 小时前
【信息安全工程师备考笔记】第三章 密码学基本理论
笔记·安全·密码学
晓数10 小时前
【硬核干货】JetBrains AI Assistant 干货笔记
人工智能·笔记·jetbrains·ai assistant
我的golang之路果然有问题10 小时前
速成GO访问sql,个人笔记
经验分享·笔记·后端·sql·golang·go·database
lwewan10 小时前
26考研——存储系统(3)
c语言·笔记·考研
搞机小能手11 小时前
六个能够白嫖学习资料的网站
笔记·学习·分类
nongcunqq11 小时前
爬虫练习 js 逆向
笔记·爬虫
汐汐咯12 小时前
终端运行java出现???
笔记