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;
请参阅<libproc.h>
和<sys/resource.h>
了解更多信息。
【讨论】:
但 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 统计信息?
markdown 通过终端的Mac OS X实用程序:(验证和修复:磁盘权限和磁盘/软件更新/ TimeMachine)