it-swarm.com.de

Linux - Wie kann ich sehen, was auf die Festplatte wartet? IO

Ich habe einen Server mit einer sehr hohen Auslastung. In Bezug auf die CPU-Auslastung fällt mir nichts auf, und es wird nicht getauscht.

Ich denke, es liegt daran, dass einige Prozesse auf Festplatten-E/A warten, und ich möchte sehen, was wartet.

Gibt es ein Programm, das mir zeigt, welche Prozesse auf IO warten? Ich weiß über iotop Bescheid, aber das zeigt, was gerade E/A macht.

Oder ist das eine dumme Frage? (Wenn ja, erkläre wie :))

42
Rory

Sie können einen E/A-Monitor wie iotop verwenden, der jedoch nur Prozesse oder Threads mit aktuellen E/A-Vorgängen anzeigt.

Wenn Sie Prozesse durchsuchen müssen, die auf E/A warten, verwenden Sie watch, um Prozesse mit dem STAT-Flag 'D' wie folgt zu überwachen:

watch -n 1 "(ps aux | awk '\$8 ~ /D/  { print \$0 }')"
47
Ali Mezgani

ps axu und suchen Sie nach Prozessen, die sich im Zustand "D" befinden. Basierend auf der Manpage ps (1) befinden sich Prozesse im D-Zustand in einem unterbrechungsfreien Ruhezustand, was fast immer "Warten auf E/A" bedeutet. Leider ist es normalerweise nicht möglich, diese Prozesse abzubrechen.

18
Zanchey

Zancheys Antwort ist die beste, die ich kenne, um herauszufinden, was auf IO wartet.

Was meinen Sie damit, wenn Sie sagen, dass Ihr Server unter hoher Last steht? Etwas Besonderes reagiert nur langsam?

Wenn Sie sich fragen, ob Ihre Festplatte IO ist der Engpass), würde ich den Befehl iostat (Teil des sysstat-Pakets) verwenden, um festzustellen, ob die Festplatte tatsächlich stark ausgelastet ist.

Beispiel:

[[email protected]: ~] iostat -x 1 3                                                                                           

avg-cpu:  %user   %Nice %system %iowait  %steal   %idle
           2.38   34.71    2.64    1.18    0.00   59.21 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.11    17.35    2.21   20.31    46.57   301.40    15.45     2.27  100.66   1.48   3.34
sda1              0.10    17.31    2.21   20.31    46.48   301.10    15.44     2.27  100.66   1.48   3.34
sda2              0.00     0.00    0.00    0.00     0.00     0.00     3.50     0.00   30.00  30.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00    18.44     0.00  677.67 512.61   0.00

avg-cpu:  %user   %Nice %system %iowait  %steal   %idle
           6.22    0.00    4.31    0.00    0.00   89.47   
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
16
Kyle Brandt

Enable block_dump Protokollierung der Prozesse, die Blocklese-/Schreibvorgänge ausführen:

echo 1 > /proc/sys/vm/block_dump
tail -f /var/log/syslog

wenn Sie fertig sind, deaktivieren Sie die Ablaufverfolgung, damit Sie Ihre Protokolldateien nicht als Spam versenden:

echo 0 > /proc/sys/vm/block_dump
0