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.