htop 从哪里收集当前用户进程的 IO 读/写数据而不需要 root?

htop 从哪里收集当前用户进程的 IO 读/写数据而不需要 root?

我找不到一种方法来捕获htop有关 IO_RATE IO_READ_RATE IO_WRITE_RATE 的单个进程的输出。

我需要它(最后几秒的 IO(或只是 1 秒),而不是总体累积的 IO)来确定进程是否运行不佳以自动重新启动它。

我无法使用,iotop因为它需要 root,这将使我的工作流程复杂化,主要是因为它显然是不必要的。

我尝试了所有能做的事情,/proc/$PID/...但没有发现任何可以用于字节 IO 的东西。并不是说它不存在,只是我找不到它。

htop因此,通过管道获取输出的方法也足以作为一种解决方法,但这不是我所要求的。

我已经可以获取top有关 %CPU 的输出,但这还不够,而且我无法在top.

下面,其他地方的每个答案都是关于 iotop (否)或 htop (无法捕获输出)或其他没有帮助的应用程序,所以我决定问这个问题:
监视正在运行的用户的可执行文件读/写的IO
https://stackoverflow.com/questions/469159/an-htop-like-tool-to-display-disk-activity-in-linux(如果atop可以的话,我还是不明白如何......)

答案1

根据man proc,您要查找的信息应位于/proc/(pid)/io

/proc/[pid]/io (since kernel 2.6.20) 该文件包含进程的 I/O 统计信息,例如:/proc/[pid]/io (since kernel 2.6.20)...

当然,您很可能找不到这个伪文件,因为它取决于内核根据一个配置选项生成的额外统计信息:

CONFIG_TASK_IO_ACCOUNTING(启用每任务存储 I/O 统计)

因此,您应该在确保设置了此选项后重建内核。正如您将在上面的链接中读到的那样,您很可能被迫选择其他。其他配置选项。 CONFIG_TASK_XACCT(通过taskstats启用扩展记帐)特别是因为它默认为no并且CONFIG_TASK_IO_ACCOUNTING依赖于它。


顺便说一句,我不能保证除了 root 和 pid 所有者之外的任何人都可以读取伪文件。前一段时间关于这个问题已经有很多讨论,这很可能取决于您的内核版本。


注意:可以通过阅读 /usr/src/linux/kernel/tsacct.c 代码推断出对这些选项的需求:

#ifdef CONFIG_TASK_XACCT
...
#ifdef CONFIG_TASK_IO_ACCOUNTING
    stats->read_bytes   = p->ioac.read_bytes & KB_MASK;
    stats->write_bytes  = p->ioac.write_bytes & KB_MASK;
    stats->cancelled_write_bytes = p->ioac.cancelled_write_bytes & KB_MASK;
...

相关内容