我的IO统计值很高。高写。但是正在写入什么文件?


15
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个写请求

Answers:


8

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

1)无论您在“ iostat”输出中看到执行更多I / O的任何设备,都可通过以下fuser命令将其使用:

fuser -uvm device

2)您将获得带有用户名的进程列表,该进程会导致更多的I / O。选择那些PIDS并在lsof命令中使用它,如下所示:

lsof -p PID | more

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


root @ host [〜]#热熔器-uv / home4 root @ host [〜]#热熔器-uvm / home4用户PID访问命令/ home4:newgames 18297 ..c ..(newgames)php cuntschi 18407 ..c ..( cuntschi)php newgames 18457 ..c ..(newgames)php
user4951 2013年

5

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

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

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

lsof -c <process name>

那应该缩小范围并帮助查明来源。


如何获得程序?lsof也不会产生任何结果。东西正在写很多东西,我不知道是什么
user4951 2013年

抱歉,我输入了错误的io实用程序。应该是iotop,不是iostat。我纠正了我的答案。

(1)您还可以更新正在运行的发行版(redhat / centos / ubuntu ...)吗?(2)这是全新安装吗?(3)是否有像samba一样的文件共享运行?
John Siu 2013年

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'.

2

使用systemtap监视每个写/写syscall。您可以进行一些核算,您将看到哪个文件/ fd获得最多的字节数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.