Wie überprüfe ich die Festplatten-E/A-Auslastung pro Prozess?

Wie überprüfe ich die Festplatten-E/A-Auslastung pro Prozess?

Ich habe ein Problem mit einem Linux-System und habe enorme Spitzen bei der Festplatten-E/A, der durchschnittlichen Servicezeit sowie der durchschnittlichen Wartezeit festgestellt sysstatund melde diese.sar

Wie kann ich beim nächsten Mal feststellen, welcher Prozess diese Spitzen verursacht?

Ist das möglich sar? Kann ich diese Informationen in den bereits aufgezeichneten sarDateien finden?

Ausgabe von sar -d, Systemstillstand trat zwischen 12.58 und 13.01 Uhr auf.

12:40:01          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
12:40:01       dev8-0     11.57      0.11    710.08     61.36      0.01      0.97      0.37      0.43
12:45:01       dev8-0     13.36      0.00    972.93     72.82      0.01      1.00      0.32      0.43
12:50:01       dev8-0     13.55      0.03    616.56     45.49      0.01      0.70      0.35      0.47
12:55:01       dev8-0     13.99      0.08    917.00     65.55      0.01      0.86      0.37      0.52
13:01:02       dev8-0      6.28      0.00    400.53     63.81      0.89    141.87    141.12     88.59
13:05:01       dev8-0     22.75      0.03    932.13     40.97      0.01      0.65      0.27      0.62
13:10:01       dev8-0     13.11      0.00    634.55     48.42      0.01      0.71      0.38      0.50

Ich habe auch diese Folgefrage zu einem anderen Thread, den ich gestern gestartet habe:

Antwort1

Wenn Sie Glück haben und die nächste Spitzenauslastungsperiode erwischen, können Sie die I/O-Statistiken pro Prozess interaktiv studieren, indem Sieiotop.

Antwort2

Sie könnenpidstatSo drucken Sie alle 20 Sekunden kumulative E/A-Statistiken pro Prozess mit diesem Befehl:

# pidstat -dl 20

Jede Zeile hat folgende Spalten:

  • PID - Prozess-ID
  • kB_rd/s – Anzahl der Kilobyte, die aufgrund der Aufgabe pro Sekunde von der Festplatte gelesen wurden.
  • kB_wr/s – Anzahl der Kilobyte, die aufgrund der Aufgabe pro Sekunde auf die Festplatte geschrieben wurden oder werden sollen.
  • kB_ccwr/s – Anzahl der Kilobyte, deren Schreibvorgänge auf die Festplatte durch die Aufgabe abgebrochen wurden. Dies kann passieren, wenn die Aufgabe einen schmutzigen Seitencache abschneidet. In diesem Fall werden einige IOs, die einer anderen Aufgabe zugewiesen wurden, nicht ausgeführt.
  • Befehl – ​​Der Befehlsname der Aufgabe.

Die Ausgabe sieht folgendermaßen aus:

05:57:12 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:32 PM       202      0.00      2.40      0.00  jbd2/sda1-8
05:57:32 PM      3000      0.00      0.20      0.00  kdeinit4: plasma-desktop [kdeinit]              

05:57:32 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:52 PM       202      0.00      0.80      0.00  jbd2/sda1-8
05:57:52 PM       411      0.00      1.20      0.00  jbd2/sda3-8
05:57:52 PM      2791      0.00     37.80      1.00  kdeinit4: kdeinit4 Running...                   
05:57:52 PM      5156      0.00      0.80      0.00  /usr/lib64/chromium/chromium --password-store=kwallet --enable-threaded-compositing 
05:57:52 PM      8651     98.20      0.00      0.00  bash 

05:57:52 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:58:12 PM       202      0.00      0.20      0.00  jbd2/sda1-8
05:58:12 PM      3000      0.00      0.80      0.00  kdeinit4: plasma-desktop [kdeinit]              

Antwort3

Nichts ist besser als eine kontinuierliche Überwachung. Zeitkritische Daten können Sie nach dem Ereignis einfach nicht zurückerhalten ...

Es gibt ein paar Dinge, die Siekönntein der Lage sein, zu überprüfen, zu belasten oder auszuschließen, /procist jedoch Ihr Freund.

sort -n -k 10 /proc/diskstats
sort -n -k 11 /proc/diskstats

Die Felder 10 und 11 zeigen die kumulierten geschriebenen Sektoren und die kumulierte Schreibzeit (ms). Dies zeigt Ihre Hot-Filesystem-Partitionen.

cut -d" " -f 1,2,42 /proc/[0-9]*/stat | sort -n -k +3

Diese Felder sind PID, Befehl und kumulative IO-Warte-Ticks. Dies zeigt Ihre Hot-Prozesse, allerdings nurwenn sie noch laufen. (Sie möchten wahrscheinlich Ihre Dateisystem-Journaling-Threads ignorieren.)

Die Nützlichkeit der oben genannten Punkte hängt von der Betriebszeit, der Art Ihrer lang laufenden Prozesse und der Verwendung Ihrer Dateisysteme ab.

Einschränkungen: Gilt nicht für Kernel vor 2.6. Lesen Sie im Zweifelsfall Ihre Dokumentation durch.

(Und jetzt tun Sie Ihrem zukünftigen Ich einen Gefallen und installieren Sie Munin/Nagios/Cacti/was auch immer ;-)

Antwort4

Verwenden Sie btrace. Es ist einfach zu verwenden, zum Beispiel btrace /dev/sda. Wenn der Befehl nicht verfügbar ist, ist er wahrscheinlich im Paket verfügbarschwarzspur.

BEARBEITEN: Da Debugfs im Kernel nicht aktiviert ist, können Sie Folgendes versuchen date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtf: oder Ähnliches. Das Protokollieren von Seitenfehlern ist natürlich nicht dasselbe wie die Verwendung von btrace, aber wenn Sie Glück haben, KÖNNTE es Ihnen Hinweise auf die speicherhungrigsten Prozesse geben. Ich habe das gerade auf einem meiner I/O-intensivsten Server ausprobiert und die Liste enthält die Prozesse, von denen ich weiß, dass sie viel I/O verbrauchen.

verwandte Informationen