Frage Wie kann ich die Platten-E / A-Auslastung pro Prozess überprüfen?


Ich habe ein Problem mit einem blockierenden Linux-System und ich habe herausgefunden, dass sysstat / sar große Spitzenwerte bei der Platten-I / O-Nutzung, der durchschnittlichen Servicezeit sowie der durchschnittlichen Wartezeit zum Zeitpunkt des Systemausfalls meldet.

Wie könnte ich herausfinden, welcher Prozess diese Spitzen beim nächsten Mal verursacht?
Ist es möglich mit sar zu arbeiten (zB: kann ich diese info aus den alreade-sar-dateien finden?

Ausgabe für "sar -d", Systemabsturz geschah um 12.58-13.01pm.

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

Dies ist eine Folgefrage zu einem Thread, den ich gestern gestartet habe: Plötzliche Lastspitzen und Festplattenblocks wartenIch hoffe, es ist in Ordnung, dass ich ein neues Thema / eine neue Frage zu diesem Thema erstellt habe, da ich das Problem noch nicht lösen konnte.


35
2017-08-12 07:48


Ursprung


Es klingt wie das Problem möglicherweise weniger ein bestimmter Prozess und mehr eine sporadisch nicht reagierende Festplatte. Platten machen diese Art von Dingen, die auf der Systemebene Klippen zu sein scheinen, die ein System trifft. Wenn Sie keine Täter finden, ist es an der Zeit, das Festplatten-Subsystem zu untersuchen. - slashdot
unix.stackexchange.com/questions/21295/... || stackoverflow.com/questions/14021810/ ... - Ciro Santilli 新疆改造中心 六四事件 法轮功


Antworten:


Wenn Sie das Glück haben, die nächste Spitzennutzungsdauer zu erreichen, können Sie pro-Prozess-E / A-Statistiken interaktiv mit Iotop.


36
2017-08-12 09:19



Hey danke! Noch ein Geek-Spielzeug zum Aufbewahren in meiner Toolbox. :-) - Janne Pikkarainen
Das Ausführen von iotop im Batch-Modus könnte eine sehr gute Ergänzung / Ersatz für die obige "ps-eo" Lösung sein. Vielen Dank! - Avada Kedavra
Awesome, "iotop -n 1 -b -o" liefert genau den Output, den ich brauche. Vielen Dank! - Avada Kedavra
sieht so aus, dass hierfür Root-Zugriff auf das System erforderlich ist - user5359531


Sie können verwenden Pidstat um kumulative io-Statistiken pro Prozess alle 20 Sekunden mit diesem Befehl zu drucken:

# pidstat -dl 20

Jede Zeile hat folgende Spalten:

  • PID - Prozess-ID
  • kB_rd / s - Anzahl der Kilobytes, die der Task pro Sekunde vom Datenträger gelesen hat.
  • kB_wr / s - Anzahl der Kilobyte, die die Task verursacht hat oder pro Sekunde auf die Festplatte geschrieben werden soll.
  • kB_ccwr / s - Anzahl der Kilobyte, deren Schreiben auf die Festplatte durch die Aufgabe abgebrochen wurde. Sch sch sch 100 100 100 100 100 100 100 100 100 100 100 100 100 sch 100 sch sch sch sch 100 100 zwischen sch 100 sch 100 100 100 100 100 100 sch 100 sch sch sch sch 100 100 100 sch 100 sch sch sch sch sch sch sch sch 100 100 sch sch sch sch sch sch sch sch sch sch sch sch sch 100 sch 100 dieser In diesem Fall wird etwas IO, dem eine andere Aufgabe zugeordnet wurde, nicht stattfinden.
  • 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]              

22
2018-04-13 14:12





Nichts schlägt die laufende Überwachung, Sie können keine zeitkritischen Daten nach dem Ereignis zurückbekommen ...

Du hast ein paar Dinge könnte in der Lage sein, zu prüfen, ob sie impliziert oder eliminiert werden - /proc ist dein Freund.

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

Felder 10, 11 sind akkumulierte geschriebene Sektoren und akkumulierte Zeit (ms) Schreiben. Dadurch werden Ihre heißen Dateisystempartitionen angezeigt.

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

Diese Felder sind PID-, Befehls- und kumulative IO-Wait-Ticks. Dies zeigt nur Ihre heißen Prozesse wenn sie noch laufen. (Wahrscheinlich möchten Sie Ihre Dateisystem-Journaling-Threads ignorieren.)

Die Nützlichkeit des Obigen hängt von der Betriebszeit, der Art Ihrer lang andauernden Prozesse und davon ab, wie Ihre Dateisysteme verwendet werden.

Vorsichtsmaßnahmen: Gilt nicht für Kernel vor 2.6, überprüfen Sie Ihre Dokumentation, wenn Sie sich nicht sicher sind.

(Jetzt geh und mach deinem Future-Self einen Gefallen, installiere Munin / Nagios / Cacti / was auch immer ;-)


7
2018-01-11 22:52





Benutzen atop. (http://www.atoptool.nl/)

Schreiben Sie die Daten in eine komprimierte Datei, die atop kann später in einem interaktiven Stil lesen. Nehmen Sie alle 10 Sekunden eine Lesung (Delta) vor. Mach es 1080 mal (3 Stunden; wenn du es also vergisst, wird dir die Ausgabedatei nicht aus der Platte laufen):

$ atop -a -w historical_everything.atop 10 1080 &

Nachdem das Schlimmste wieder passiert ist:

(Auch wenn es immer noch im Hintergrund läuft, fügt es nur alle 10 Sekunden an)

% atop -r historical_everything.atop

Da du IO gesagt hast, würde ich 3 Schlüssel drücken: tdD

t - move forward to the next data gathering (10 seconds)
d - show the disk io oriented information per process
D - sort the processes based on disk activity
T - go backwards 1 data point (10 seconds probably)
h - bring up help
b - jump to a time (nearest prior datapoint) - e.g. b12:00 - only jumps forward
1 - display per second instead of delta since last datapiont in the upper half of the display

7
2017-10-16 16:41





Benutzen btrace. Es ist zum Beispiel einfach zu bedienen btrace /dev/sda. Wenn der Befehl nicht verfügbar ist, ist er wahrscheinlich im Paket verfügbar blktrace.

BEARBEITEN: Da debugfs im Kernel nicht aktiviert ist, könnten Sie es versuchen date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtf oder ähnliches. Logging Seite Fehler ist natürlich nicht das Gleiche wie die Verwendung von Btrace, aber wenn Sie Glück haben, kann es Ihnen einen Hinweis auf die meisten Festplatte hungrige Prozesse geben. Ich habe es gerade auf einem meiner meisten I / O-intensiven Server versucht, und die Liste beinhaltete die Prozesse, von denen ich weiß, dass sie viele I / O verbrauchen.


3
2017-08-12 08:02



Hallo Janne, der Kernel ist leider nicht mit Debug-Dateisystem kompiliert, und es ist ein Live-System, so dass ich den Kernel nicht neu kompilieren kann. Gibt es eine andere Möglichkeit, dies ohne Neukompilierung zu tun? - Avada Kedavra
OK, ich habe meine Antwort ein wenig bearbeitet :) - Janne Pikkarainen
Großartig, jetzt kommen wir irgendwohin! Ich denke darüber nach, dies in einen Cronjob zu legen und gleichzeitig mit dem Sarcron-Job auszuführen. Dann, wenn der Server das nächste Mal zum Stillstand kommt, sollte ich in der Lage sein, die Rate der Seitenfehler zu vergleichen, um zu sehen, welcher Prozess / Prozesse eine erhöhte Rate von Seitenfehlern aufweist. Ich denke, ich könnte Pech haben und eine Erhöhung der Festplatte für alle Prozesse während des Verkaufs sehen, aber es ist definitiv einen Versuch wert. Danke Janne! (Ich würde Ihre Antwort ablehnen, wenn ich könnte: S) - Avada Kedavra
Bitte. Lass mich wissen wie es gelaufen ist, das war nur ein kreativer Problemlösungsversuch von mir. :-) - Janne Pikkarainen
Die iotop-Ausgabe ist leichter zu interpretieren, also akzeptiere diese Lösung. Ich werde zurückkommen, um über deine Antwort zu entscheiden, sobald ich genug Reputation dafür bekommen habe. Danke für deine Unterstützung! - Avada Kedavra