【问题标题】:Per Process disk read/write statistics in Mac OS XMac OS X 中的每个进程磁盘读/写统计信息
【发布时间】:2023-03-22 16:05:02
【问题描述】:

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

【问题讨论】:

  • @Anoop 这是处理器监控工具的一部分,不用于黑客攻击

标签: performance macos statistics disk


【解决方案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 个磁盘读/写用户(我不确定是不是总和,但它没有排序)。

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多