GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

Lösung 1:

Wenn Sie das Glück haben, die nächste Spitzenauslastungszeit zu erwischen, können Sie die E/A-Statistiken pro Prozess interaktiv mit iotop studieren.

Lösung 2:

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

# pidstat -dl 20

Jede Zeile hat folgende Spalten:

  • PID - Prozess-ID
  • kB_rd/s – Anzahl der Kilobyte, die der Task pro Sekunde von der Festplatte gelesen hat.
  • kB_wr/s – Anzahl der Kilobyte, die der Task pro Sekunde auf die Festplatte geschrieben hat oder verursachen soll.
  • kB_ccwr/s – Anzahl der Kilobytes, deren Schreiben auf die Festplatte durch die Aufgabe abgebrochen wurde. Dies kann auftreten, wenn die Aufgabe einen fehlerhaften Pagecache abschneidet. In diesem Fall werden einige E/A, für die eine andere Aufgabe berücksichtigt wurde, nicht ausgeführt.
  • Befehl - Der Befehlsname der Aufgabe.

Die Ausgabe sieht so 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]              

Lösung 3:

Nichts geht über eine kontinuierliche Überwachung, Sie können zeitkritische Daten nach dem Ereignis einfach nicht zurückerhalten...

Es gibt ein paar Dinge, die Sie könnten in der Lage sein, zu überprüfen, ob sie impliziert oder eliminiert werden – /proc ist dein Freund.

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

Die Felder 10, 11 sind akkumulierte geschriebene Sektoren und akkumulierte Schreibzeit (ms). Dies zeigt Ihre heißen Dateisystempartitionen.

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

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

Die Nützlichkeit des Obigen hängt von der Betriebszeit, der Art Ihrer lang laufenden Prozesse und der Nutzung Ihrer Dateisysteme ab.

Vorbehalte:gilt nicht für Kernel vor 2.6, überprüfen Sie Ihre Dokumentation, wenn Sie sich nicht sicher sind.

(Nun geh und tu deinem zukünftigen Selbst einen Gefallen, installiere Munin/Nagios/Cacti/was auch immer;-)

Lösung 4:

Verwenden Sie atop . (http://www.atoptool.nl/)

Schreiben Sie die Daten in eine komprimierte Datei, die atop später interaktiv lesen können. Nehmen Sie alle 10 Sekunden eine Messung (Delta) vor. tun Sie es 1080 Mal (3 Stunden; wenn Sie es also vergessen, wird Ihnen die Ausgabedatei nicht die Festplatte ausgehen):

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

Nachdem etwas Schlimmes wieder passiert:

(auch wenn es noch im Hintergrund läuft, es wird nur alle 10 Sekunden angehängt)

% atop -r historical_everything.atop

Da Sie IO gesagt haben, würde ich 3 Tasten 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

Lösung 5:

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 blktrace verfügbar .

BEARBEITEN :Da das debugfs im Kernel nicht aktiviert ist, könnten Sie es mit date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtf versuchen oder ähnliches. Das Protokollieren von Seitenfehlern ist natürlich nicht dasselbe wie die Verwendung von Btrace, aber wenn Sie Glück haben, kann es Ihnen einen Hinweis auf die Prozesse geben, die am meisten Festplatten benötigen. Ich habe gerade einen meiner I/O-intensivsten Server ausprobiert und die Prozesse aufgelistet, von denen ich weiß, dass sie viel I/O verbrauchen.


Linux
  1. Linux – Wie überwacht man die Festplatten-E/A in einem bestimmten Verzeichnis?

  2. Wie drosselt man E/A pro Prozess auf ein maximales Limit?

  3. Wie überprüft man, auf welche Signale ein Prozess hört?

  4. Wie überprüfe ich die Bandbreitennutzung von VPS?

  5. Migrieren Sie auf einen Mehrzweck- oder E/A-Server

So überprüfen Sie den Speicherplatz unter Linux

So überprüfen Sie fehlerhafte Sektoren oder fehlerhafte Blöcke auf der Festplatte in Linux

So überprüfen Sie die Speicherplatznutzung in Linux

Fehlerbehebung bei langsamen Servern:So überprüfen Sie CPU, RAM und Festplatten-E/A

So überprüfen Sie den freien Speicherplatz unter Linux

So überprüfen Sie die Linux-CPU-Auslastung oder -Auslastung