16 Stimmen

Wie kann ich aufzeichnen, welcher Prozess oder welche Kernel-Aktivität die Festplatte in GNU/Linux benutzt?

Auf einem bestimmten Debian-Server melden iostat (und ähnliche Programme) ein unerwartet hohes Volumen (in Bytes) an Schreibvorgängen auf der Festplatte. Ich habe Schwierigkeiten herauszufinden, welcher Prozess diese Schreibvorgänge durchführt.

Zwei interessante Punkte:

  1. Ich habe versucht, einen Systemdienst nach dem anderen zu deaktivieren, ohne Erfolg. Die Festplattenaktivität bleibt ziemlich konstant und unerwartet hoch.

  2. Trotz des Schreibens scheinen sie insgesamt nicht mehr Platz auf der Festplatte zu verbrauchen.

Beides lässt mich vermuten, dass das Schreiben etwas ist, das der Kernel macht, aber ich swappe nicht, also ist mir nicht klar, was Linux versuchen könnte zu schreiben.

Könnte man oben ausprobieren:

http://www.atcomputing.nl/Tools/atop/

aber ich möchte Parcheando in meinem Kernel vermeiden.

Haben Sie eine Idee, wie Sie das herausfinden können?

17voto

Mikeage Punkte 6304

Iotop ist gut (eigentlich großartig).

Wenn Sie einen Kernel von vor 2.6.20 haben, können Sie die meisten dieser Werkzeuge nicht verwenden.

Stattdessen können Sie Folgendes versuchen (was für fast jeden 2.6-Kernel funktionieren sollte, IIRC):

sudo -s
dmesg -c
/etc/init.d/klogd stop
echo 1 > /proc/sys/vm/block\_dump
rm /tmp/disklog
watch "dmesg -c >> /tmp/disklog"
   CTRL-C when you're done collecting data
echo 0 > /proc/sys/vm/block\_dump
/etc/init.d/klogd start
exit (quit root shell)

cat /tmp/disklog | awk -F"\[() \\t\]" '/(READ|WRITE|dirtied)/ {activity\[$1\]++} END {for (x in activity) print x, activity\[x\]}'| sort -nr -k2

Die dmesg -c Zeilen löschen Ihr Kernelprotokoll. Der Logger wird dann abgeschaltet und manuell (mit watch) auf eine Festplatte übertragen (der Speicherpuffer ist klein, weshalb wir dies tun müssen). Lassen Sie ihn etwa fünf Minuten lang laufen und beenden Sie dann den Watch-Prozess mit CTRL-c. Nachdem Sie die Protokollierung abgeschaltet und klogd neu gestartet haben, analysieren Sie die Ergebnisse mit dem kleinen Stückchen awk am Ende.

3voto

Igor Pozgaj Punkte 200

Wenn Sie einen Kernel verwenden, der neuer als 2.6.20 ist, ist das sehr einfach, da dies die erste Version des Linux-Kernels ist, die I/O-Accounting enthält. Wenn Sie Ihren eigenen Kernel kompilieren, stellen Sie sicher, dass Sie einschließen:

CONFIG_TASKSTATS=y
CONFIG_TASK_IO_ACCOUNTING=y

Kernel aus Debian-Paketen enthalten diese Flags bereits, so dass Sie Ihren Kernel nicht neu kompilieren müssen. Das Standardprogramm für den Zugriff auf E/A-Buchhaltungsdaten in Echtzeit ist iotop(1). Es gibt Ihnen eine vollständige Liste der Prozesse, die vom I/O-Scheduler verwaltet werden, und zeigt für jeden Prozess Statistiken über die genutzte I/O-Bandbreite (Lesen, Schreiben und Gesamt) an.

2voto

Paweł Hajdan Punkte 17384

Sie möchten vielleicht Folgendes untersuchen iotop für Linux . Es gibt einige Solaris-Versionen, aber es gibt zum Beispiel auch ein Debian-Paket.

1voto

Mnementh Punkte 48509

Sie können mit dem UNIX-Befehl lsof (offene Dateien auflisten). Das gibt den Prozess, die Prozess-ID und den Benutzer für jede offene Datei aus.

1voto

Tomek Paczkowski Punkte 554

Sie können auch Folgendes verwenden htop , Aktivierung der Spalte IO_RATR. Htop ist ein hervorragender Top-Ersatz.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X