Linux - Bagaimana saya bisa melihat apa yang menunggu disk IO

42

Saya memiliki server yang memiliki beban sangat tinggi. Tidak ada yang melompat ke arah saya dalam hal penggunaan CPU, dan itu tidak bertukar.

Saya pikir itu menyebabkan beberapa proses menunggu disk IO, dan saya ingin melihat apa yang menunggu.

Apakah ada program yang akan menunjukkan kepada saya proses apa yang menunggu untuk IO? Saya tahu iotoptapi itu menunjukkan apa yang sedang dilakukan IO.

Atau ini pertanyaan konyol? (Jika demikian jelaskan caranya :))

Rory
sumber

Jawaban:

47

Anda dapat menggunakan monitor I / O seperti iotop, tetapi hanya akan menunjukkan kepada Anda proses atau utas dengan operasi I / O saat ini.

Jika Anda perlu menelusuri proses menunggu I / O, gunakan arloji untuk memantau proses dengan bendera STAT 'D' seperti di bawah ini:

watch -n 1 "(ps aux | awk '\$8 ~ /D/  { print \$0 }')"
Ali Mezgani
sumber
Manis. Ini membantu saya dengan baik.
Stu Thompson
2
Atau, Anda dapat menggunakan perintah 'iotop -o' yang hanya akan menampilkan 'proses atau utas yang benar-benar melakukan I / O' sesuai iotop --help.
Ryan
1
@Ryan Selain tidak memberikan iowaitinformasi yang diperlukan , iotopmemerlukan hak yang lebih tinggi. watch,, psdan awkhanya memberikan informasi yang diperlukan, dan tidak memerlukan hak yang lebih tinggi.
Kaya
4
Saya akan menggunakan psflag POSIX dan awkmengeditnya secara berbeda: watch "(ps -eo stat,pid,comm|awk '(NR==1)||(\$1~/D/){print}')"- dengan cara ini Anda mendapatkan judul kolom, dan stat, pid, dan perintah.
Rich
18

ps axudan mencari proses yang dalam kondisi "D". Berdasarkan halaman ps (1) , proses yang dalam status D berada dalam kondisi tidur yang tidak terputus, yang hampir selalu berarti 'menunggu IO'. Sayangnya, membunuh proses ini biasanya tidak mungkin.

Zanchey
sumber
16

Jawaban Zanchey adalah yang terbaik yang saya tahu untuk mencari tahu apa yang sedang menunggu IO.

Ketika Anda mengatakan server Anda berada di bawah beban tinggi, apa yang Anda maksud dengan itu? Sesuatu yang lambat merespons?

Jika Anda bertanya-tanya apakah Disk IO Anda adalah hambatan, saya akan menggunakan perintah iostat (bagian dari paket sysstat) untuk melihat apakah disk tersebut benar-benar berada di bawah beban berat.

Contoh:

[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
sumber
1
Akan sangat membantu untuk menjelaskan bagaimana menafsirkan output iostat "untuk melihat apakah disk benar-benar di bawah beban berat."
Scott Buchanan
0

Aktifkan pencatatan block_dump dari proses apa yang melakukan operasi baca / tulis blok:

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

setelah selesai, nonaktifkan penelusuran agar Anda tidak mengirim spam file log Anda:

echo 0 > /proc/sys/vm/block_dump
Aleksandr Levchuk
sumber