Linux - jak mogę zobaczyć, co czeka na IO dysku

42

Mam serwer, który ma naprawdę duże obciążenie. Nic nie wyskakuje na mnie pod względem wykorzystania procesora i nie jest zamiana.

Myślę, że to dlatego, że niektóre procesy czekają na We / Wy dysku i chcę zobaczyć, co czeka.

Czy jest jakiś program, który pokaże mi, jakie procesy czekają na IO? Wiem o iotoptym, ale pokazuje to, co obecnie robi IO.

Czy to głupie pytanie? (Jeśli tak, wyjaśnij jak :))

Rory
źródło

Odpowiedzi:

47

Możesz użyć monitora we / wy, takiego jak iotop, ale pokaże tylko procesy lub wątki z bieżącymi operacjami we / wy.

Jeśli chcesz przeglądać procesy oczekujące na operacje we / wy, użyj watch do monitorowania procesów z flagą STAT „D”, jak poniżej:

watch -n 1 "(ps aux | awk '\$8 ~ /D/  { print \$0 }')"
Ali Mezgani
źródło
Słodkie. To mi ładnie pomogło.
Stu Thompson,
2
Alternatywnie możesz użyć polecenia „iotop -o”, które wyświetli tylko „procesy lub wątki faktycznie wykonujące operacje we / wy” zgodnie z iotop --help.
Ryan,
1
@ Ryan Oprócz tego, że nie dostarcza wymaganych iowaitinformacji, iotopwymaga podwyższonych uprawnień. watch, psi awkpodaj tylko wymagane informacje i nie wymagaj podwyższonych uprawnień.
Bogaty
4
Użyłbym ps„s flagi POSIX i awked go różnie: watch "(ps -eo stat,pid,comm|awk '(NR==1)||(\$1~/D/){print}')"- W ten sposób uzyskasz nagłówki kolumn, a stat, PID i polecenia.
Bogaty
18

ps axui poszukaj procesów, które są w stanie „D”. Na podstawie strony ps (1) procesy znajdujące się w stanie D są w nieprzerwanym śnie, co prawie zawsze oznacza „czekanie na IO”. Niestety zabicie tych procesów zwykle nie jest możliwe.

Zanchey
źródło
16

Odpowiedź Zancheya jest najlepsza, jaką wiem, aby dowiedzieć się, co czeka na IO.

Kiedy mówisz, że twój serwer jest obciążony, co masz na myśli? Coś szczególnie reaguje wolno?

Jeśli zastanawiasz się, czy Twoje We / Wy dysku jest wąskim gardłem, użyłbym polecenia iostat (część pakietu sysstat), aby sprawdzić, czy dysk faktycznie jest obciążony.

Przykład:

[kbrandt@kbrandt-opadmin: ~] 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
Kyle Brandt
źródło
1
Pomocne byłoby wyjaśnienie, w jaki sposób interpretować dane wyjściowe programu iostat, „aby sprawdzić, czy dysk rzeczywiście jest mocno obciążony”.
Scott Buchanan,
0

Włącz rejestrowanie zrzutu_ bloku dla tego, jakie procesy wykonują operacje odczytu / zapisu bloku:

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

po zakończeniu wyłącz śledzenie, aby nie spamować plików dziennika:

echo 0 > /proc/sys/vm/block_dump
Aleksandr Levchuk
źródło