解决 macOS 大量磁盘写入问题历程

起因

突然发现 launchd 进程一天写入数据接近 1T。

过程

  1. 启用 dtrace 便于监视文件写入
    • 重新启动计算机
    • 在开机时按住 +R
    • 登录并从菜单中启动终端程序
    • 执行命令 csrutil enable –without dtrace
    • 执行命令 reboot 从新启动计算机
  2. 查找被写入的磁盘文件
    • 通过活动监视器找到大量写入磁盘的PID, 本例launchd PID 是 1
    • 在终端中执行 sudo iosnoop -v -p 1 参数p后面是刚刚找到的PID
    • 通过SIZE列可以看到每次写入的字节数量,通过PATHNAME列活动文件名称
  3. 确定被写入的文件名后判断是什么应用导致文件写入
    • 我们发现文件名是 ??/snapshots/default_boot/ram.img 判断和android模拟器的快照功能相关,通过关闭模拟的自动快照功能解决了问题。
  4. 关闭 dtrace
    • 从新执行第一步 替换 命令 csrutil enable –without dtracecsrutil enable

总结

Android 模拟器设计问题导致运行内存数据会每 30s 一次写入磁盘,写入动作是 launchd 进程执行的。目前没有搞懂其中关联,如果是Android 模拟器本身写入磁盘问题会更容易发现。只需要使用活动监视器就可以判断。后续会提交bug到Google希望可以修复故障拯救大家的SSD。