起因
突然发现 launchd 进程一天写入数据接近 1T。
过程
- 启用 dtrace 便于监视文件写入
- 重新启动计算机
- 在开机时按住 ⌘+R
- 登录并从菜单中启动终端程序
- 执行命令 csrutil enable –without dtrace
- 执行命令 reboot 从新启动计算机
- 查找被写入的磁盘文件
- 通过活动监视器找到大量写入磁盘的PID, 本例launchd PID 是 1
- 在终端中执行 sudo iosnoop -v -p 1 参数p后面是刚刚找到的PID
- 通过SIZE列可以看到每次写入的字节数量,通过PATHNAME列活动文件名称
- 确定被写入的文件名后判断是什么应用导致文件写入
- 我们发现文件名是 ??/snapshots/default_boot/ram.img 判断和android模拟器的快照功能相关,通过关闭模拟的自动快照功能解决了问题。
- 关闭 dtrace
- 从新执行第一步 替换 命令 csrutil enable –without dtrace 为 csrutil enable
总结
Android 模拟器设计问题导致运行内存数据会每 30s 一次写入磁盘,写入动作是 launchd 进程执行的。目前没有搞懂其中关联,如果是Android 模拟器本身写入磁盘问题会更容易发现。只需要使用活动监视器就可以判断。后续会提交bug到Google希望可以修复故障拯救大家的SSD。