我的 io 统计数据很高。高写。但是正在写入什么文件呢?

我的 io 统计数据很高。高写。但是正在写入什么文件呢?
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          11.50    0.02    5.38    0.07    0.00   83.04

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdc               0.01    89.92    0.26   41.59     3.36   457.19    22.01     0.23    5.60   0.09   0.38
sdb               0.10    15.59    0.40   14.55     8.96   120.57    17.33     0.04    2.91   0.07   0.11
sda               0.13    45.37    0.96    8.09    20.06   213.56    51.63     0.02    2.64   0.16   0.14
sde               0.01    31.83    0.09   11.34     0.94   103.56    18.29     0.04    3.52   0.14   0.16
sdd               0.01    48.01    0.13   19.81     1.58   202.16    20.44     0.11    5.62   0.13   0.25

有没有办法知道正在写入哪些文件? 457 KB/秒

另外这台linux机器也有同样的问题。

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          20.50    0.00   46.48   20.74    0.00   12.28

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.17    11.61    0.99    3.51    36.65    59.43    42.70     0.10   23.20   3.84   1.73
sdb               0.55   224.18   24.30   97.45   246.48  1287.12    25.19     3.96   32.53   7.88  95.91
sdd               0.53   226.75   25.56   90.96   283.50  1271.69    26.69     3.43   29.44   8.22  95.75
sdc               0.00     1.76    0.28    0.06     4.73     7.26    70.41     0.00   12.00   2.12   0.07
dm-0              0.00     0.00    1.11   14.77    36.41    58.92    12.01     1.00   62.86   1.09   1.74
dm-1              0.00     0.00    0.04    0.12     0.17     0.49     8.00     0.00   21.79   2.47   0.04
dm-2              0.00     0.00    0.01    0.00     0.05     0.01     8.50     0.00    7.90   2.08   0.00

对于不承载任何内容的服务器,每秒 1200 个写入请求

答案1

好吧,你可以尝试以下在 RHEL6 中对我有用的命令:

  1. 无论您在“iostat”输出中看到执行更多 I/O 的设备,请将其与fuser命令(来自psmisc包)一起使用,如下所示:

    定影-UVM装置

  2. 您将获得一个进程列表,其中包含导致更多 I/O 的用户名。选择这些 PIDS 并在lsof命令中使用它,如下所示:

    lsof -p PID | lsof -p PID |更多的

  3. 您将获得文件/目录列表以及执行最大 I/O 的用户。

答案2

除了在使用该文件的进程内之外,似乎没有工具可以找出每个文件的 I/O 吞吐量。但有一些方法可以找出进程 I/O 吞吐量。

iotop - 它是一个类似 top/iftop 的实用程序,显示进程 I/O 吞吐量。

确定哪个进程有大量 I/O 后,使用以下命令找出正在使用的文件

lsof -c <process name>

这应该会缩小范围并有助于查明来源。

答案3

您可以使用inotifywaitfrom 来inotify-tools准确找出正在写入哪个文件。这不会告诉您正在写入多少数据,但它至少会告诉您正在写入哪些文件。

例如,一旦在以下位置创建、修改或删除文件,此命令将立即打印文件名/tmp

$ sudo inotifywait -e modify -e attrib -e move -e create -e delete -m -r /tmp
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/tmp/ CREATE test
/tmp/ MODIFY test

不幸的是,您需要猜测哪个目录包含要写入的文件。如果您尝试在根目录上使用它,则会失败,尽管显然可以覆盖:

$ sudo inotifywait -e modify -e attrib -e move -e create -e delete -m -r /
Setting up watches.  Beware: since -r was given, this may take a while!
Failed to watch /; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'.

答案4

csysdig。 https://github.com/draios/sysdig/wiki/Csysdig-概述

他们甚至还提供了演示如何操作的视频链接。 https://www.youtube.com/watch?v=UJ4wVrbP-Q8

相关内容