Ich habe einen hohen Io-Status. Hoch schreibt. Aber welche Dateien werden geschrieben?

13
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

Gibt es eine Möglichkeit zu wissen, welche Dateien geschrieben werden? 457 kB / s

Auch diese andere Linux-Maschine hat das gleiche Problem.

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 Schreibanfragen pro Sekunde für einen Server, der nichts hostet

user4951
quelle

Antworten:

7

Nun, Sie könnten die folgenden Befehle ausprobieren, die in RHEL6 für mich funktionierten:

1) Welches Gerät auch immer in der Ausgabe "iostat" angezeigt wird und mehr E / A ausführt, verwenden Sie es mit dem fuserBefehl wie folgt:

fuser -uvm device

2) Sie erhalten eine Liste der Prozesse, bei denen der Benutzername mehr E / A verursacht. Wählen Sie diese PIDS aus und verwenden Sie sie im lsofBefehl wie folgt:

lsof -p PID | more

3) Sie erhalten eine Liste der Dateien / Verzeichnisse zusammen mit dem Benutzer, der die maximale E / A-Leistung erbringt.

Ravi Trivedi
quelle
root @ host [~] # fixiereinheit -uv / home4 root @ host [~] # fixiereinheit -uvm / home4 BENUTZER PID ZUGRIFF BEFEHL / home4: neue spiele 18297 ..c .. (neue spiele) php cuntschi 18407 ..c .. ( cuntschi) php newgames 18457 ..c .. (newgames) php
user4951
5

Es scheint, dass es keine Tools gibt, mit denen der E / A-Durchsatz pro Datei ermittelt werden kann, außer innerhalb des Prozesses, der die Datei verwendet. Es gibt jedoch Möglichkeiten, den E / A-Durchsatz des Prozesses zu ermitteln.

iotop - Dies ist ein Top / Iftop-ähnliches Dienstprogramm, das den E / A-Durchsatz des Prozesses anzeigt.

Nachdem Sie ermittelt haben, welcher Prozess über schwere E / A-Vorgänge verfügt, ermitteln Sie anhand der folgenden Schritte, welche Datei verwendet wird

lsof -c <process name>

Das sollte den Umfang einschränken und helfen, die Quelle zu lokalisieren.

John Siu
quelle
Wie bekomme ich den Prozess? lsof produzieren auch nichts. Etwas schreibt so viele Dinge und ich weiß nicht was
user4951
Entschuldigung, ich habe das falsche io-Dienstprogramm verwendet. Es sollte iotopnicht sein iostat. Ich habe meine Antwort korrigiert.
John Siu
(1) Können Sie auch aktualisieren, welche Distribution (redhat / centos / ubuntu ...) Sie ausführen? (2) Ist das eine Neuinstallation? (3) Gibt es eine Dateifreigabe wie Samba?
John Siu
3

Mit inotifywaitfrom können Sie inotify-toolsgenau herausfinden, in welche Datei geschrieben wird. Dies sagt Ihnen nicht, wie viele Daten geschrieben werden, aber es sagt Ihnen zumindest, in welche Dateien geschrieben wird, wenn dies geschieht.

Dieser Befehl gibt beispielsweise den Dateinamen aus, sobald eine Datei erstellt, geändert oder gelöscht wurde in /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

Leider müssen Sie raten, in welches Verzeichnis die Dateien geschrieben werden. Dies schlägt fehl, wenn Sie versuchen, es im Stammverzeichnis zu verwenden, obwohl dies anscheinend überschrieben werden kann:

$ 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'.
gibt zu
quelle
2

Verwenden Sie systemtap, um jeden Schreib- / Schreib-Systemaufruf zu überwachen. Sie können etwas Buchhaltung machen und Sie werden sehen, welche Datei / fd die meisten Bytes bekommt.

Erben Mo
quelle