深入了解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

相关推荐
WDeLiang34 分钟前
Flask学习笔记 - 模板渲染
笔记·学习·flask
明月清了个风1 小时前
数据结构与算法学习笔记----贪心区间问题
笔记·学习·算法·贪心算法
因为奋斗超太帅啦1 小时前
MySQL学习笔记(一)——MySQL下载安装配置
笔记·学习·mysql
aoxiang_ywj2 小时前
【Linux】内核驱动学习笔记(二)
linux·笔记·学习
Moonnnn.2 小时前
运算放大器(五)电压比较器
笔记·学习·硬件工程
kfepiza4 小时前
`accept_ra` 和 `autoconf` 和 `forwarding` 的关系 笔记250404
linux·网络·笔记·tcp/ip·智能路由器·ip·tcp
kfepiza4 小时前
Debian编译安装mysql8.0.41源码包 笔记250401
数据库·笔记·mysql·debian·database
kfepiza7 小时前
Debian用二进制包安装mysql8.0.41 笔记250401
数据库·笔记·mysql·debian·database
星星火柴9368 小时前
数据结构:链表 (C++实现)
数据结构·c++·笔记·链表
ん贤8 小时前
2024第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
c语言·数据结构·c++·经验分享·笔记·算法·蓝桥杯