监控进程对文件的访问情况及访问速度

监控进程对文件的访问情况及访问速度

我的系统中有多个磁盘,有时我的根分区的读取使用率很高。我知道有些进程正在读取大量数据,但都是从所有磁盘读取的。我如何找出哪个进程正在访问哪个文件?

我试过 htop、dstat 或 iotop。但是这些工具似乎无法显示进程和文件的活动。Windows 资源监视器可以完美地完成这项工作:

在此处输入图片描述

我无法想象 Linux 没有类似的控制台工具。

答案1

您正在寻找的工具是atop

atop可以用来交互地查看当前磁盘、内存、网络和所有其他进程的主要细节。

atop还支持作为服务运行,将所有数据捕获到压缩日志文件,例如以 1 分钟的间隔捕获所有进程统计信息:

atop -a -w ~/atop_current 60

然后读回去

atop -r ~/atop_current

要切换到“磁盘”视图,您可以d在交互式控制台上运行时按。

t然后,您可以使用和(大写和小写)按时间向前和向后浏览T。当前“时间间隔”将显示在屏幕顶部。

在任何给定的“间隔”中,我都会看到类似这样的内容,显示该过程写入了多少数据、读取了多少数据等等。

   RDDSK    WRDSK       WCANCL    DSK     CMD 
   8192K    2304K       0K        100%    Proc1
      0K      32K       0K        0%      Proc2
      0K       0K       0K        0%      Proc3
      0K       0K       0K        0%      Proc4

答案2

对于可能对您有用的不同视角,您可以使用审计控制记录对特定目录的访问(当然,/如果您确实愿意,您也可以对根目录执行此操作)。

例如,在 Ubuntu 上,你可以使用

sudo apt-get install auditd audispd-plugins

nano /etc/audit/auditd.conf如果您想指定日志位置,请编辑配置文件。

现在您需要添加规则,说明您想要监控的内容。尽量使它们尽可能严格,文件系统中可能会发生很多事情……我建议这样做(当然要适应您的路径):

auditctl -a exit,always -F dir=/home -F perm=rwa

完成后不要忘记禁用:

auditctl -D

现在你的日志应该列出所有访问,并进程号负责该过程的进程。

相关内容