Mac OS X 中的每个进程磁盘读/写统计信息

Posted

技术标签:

【中文标题】Mac OS X 中的每个进程磁盘读/写统计信息【英文标题】:Per Process disk read/write statistics in Mac OS X 【发布时间】:2013-03-25 01:49:20 【问题描述】:

如何在 Mac OS X 中以编程方式获取每个进程的磁盘 i/o 统计信息。在“Activity Monitor”应用程序或“top”命令中,我们只能获取整个系统磁盘 i/o 统计信息。 供参考Similar question asked for PC.

【问题讨论】:

@Anoop 这是处理器监控工具的一部分,不用于黑客攻击 【参考方案1】:

使用iotop(作为root),例如:

iotop -C 3 10

但(对我而言)最好的方法是:

sudo fs_usage -f filesys

【讨论】:

非常方便。 iotop 只向我展示了 mds 和 mdworker 正在敲击我的磁盘。 fs_usage 在 Mail.app 中显示了它正在索引的无数文件,因此为我指出了问题所在的正确方向。 请注意,对于 El Capitan,它不起作用,因为 iotop 依赖于 dtrace。 El Capitan 使用无根 (SIP) 模式禁用 dtrace 这在 Sierra 上也被破坏了。【参考方案2】:

由于这里没有关于如何以编程方式执行此操作的答案,这里有一些更多信息。如果您可以使用 C/C++/ObjectiveC++,则可以从 libproc 中获取一些信息。 proc_pid_rusage 函数为您提供给定进程的大量资源信息,但与您的问题相关的是:

struct rusage_info_v3 
    ...
    uint64_t ri_diskio_bytesread;
    uint64_t ri_diskio_byteswritten;
    ...
;

示例代码:

pid_t pid = 10000;
rusage_info_current rusage;
if (proc_pid_rusage(pid, RUSAGE_INFO_CURRENT, (void **)&rusage) == 0)

    cout << rusage.ri_diskio_bytesread << endl;
    cout << rusage.ri_diskio_byteswritten << endl;

请参阅&lt;libproc.h&gt;&lt;sys/resource.h&gt; 了解更多信息。

【讨论】:

但 proc_pid_rusage 总是以 -1 失败,并且 errno 为 22。【参考方案3】:

由于 OP 专门要求提供磁盘 I/O 统计信息,我建议

sudo fs_usage -f diskio

它只关注读/写事件,与接受的答案中提到的-f filesys 相反。 (不知道当时是否没有 diskio 选项。)

【讨论】:

【参考方案4】:

活动监视器在“磁盘”选项卡中显示每个进程的 I/O 统计信息(可能是自提出此问题以来的新内容)。 请参阅“写入字节数”和“读取字节数”列。

【讨论】:

这些是进程生命周期内的汇总计数,不显示周期性/当前统计信息,如 top 或 iotop。我不知道为什么 Apple 认为这些统计数据很有用。人们想要iotop 之类的功能。 对,我最终只是按“写入的字节数”等排序,并用我的眼睛手动跟踪增量。可悲的是,根本不是程序化的。【参考方案5】:

我找到了位于菜单栏中的iStat Menus。只显示前 5 个磁盘读/写用户(我不确定是不是总和,但它没有排序)。

【讨论】:

以上是关于Mac OS X 中的每个进程磁盘读/写统计信息的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上以编程方式获取每个进程的磁盘 io 统计信息?

在 Mac OS X 上检索系统信息 [关闭]

Mac OS X是啥英文的缩写?有啥意思?

如何安装mac os x el capitan

在Mac OS X上创建加密的稀疏磁盘映像

markdown 通过终端的Mac OS X实用程序:(验证和修复:磁盘权限和磁盘/软件更新/ TimeMachine)