Linux - disk GÇ'lerini neyin beklediğini nasıl görebilirim


42

Yükü çok yüksek olan bir sunucum var. CPU kullanımı açısından hiçbir şey bana atlamıyor ve değişmiyor.

Bunun nedeni bazı işlemlerin disk GÇ'lerini beklemesinin nedeni ve neyin beklediğini görmek istiyorum.

Bana hangi süreçlerin IO için beklediğini gösteren bir program var mı? Biliyorum iotopama bu şu anda ne yaptığını gösteriyor.

Yoksa bu aptalca bir soru mu? (Eğer öyleyse nasıl olduğunu açıklayın :))

Yanıtlar:


47

İotop gibi bir G / Ç monitörü kullanabilirsiniz, ancak yalnızca geçerli G / Ç işlemleriyle işlemleri veya iş parçacıklarını gösterir.

G / Ç için bekleyen işlemlere göz atmanız gerekiyorsa, aşağıdaki gibi STAT bayrağı olan 'D' durumlarını izlemek için saati kullanın:

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

Tatlı. Bu bana güzel yardımcı oldu.
Stu Thompson

2
Alternatif olarak, iotop --help komutuna göre yalnızca 'G / Ç' işlemlerini veya gerçekte G / Ç işlemlerini gösteren 'iotop -o' komutunu kullanabilirsiniz.
Ryan,

1
Ondan Kenara @Ryan değil gerekli tedarik iowaitbilgi, iotopyükseltilmiş ayrıcalık gerektirir. watch, psve awkyalnızca gerekli bilgileri verin ve yükseltilmiş ayrıcalıklar gerektirmez.
Zengin

4
Kullanmış olurdu ps'ın POSIX bayraklar ve awkfarklı şekilde dışarı ed: watch "(ps -eo stat,pid,comm|awk '(NR==1)||(\$1~/D/){print}')"- Eğer sütun başlıkları olsun bu şekilde ve istatistik, pid ve komutu.
Zengin

18

ps axuve "D" durumunda olan süreçleri araştırın. Ps (1) kılavuz sayfasına dayanarak , D durumunda olan işlemler kesintisiz uyku halindedir, bu da neredeyse her zaman 'IO'yu beklemek' anlamına gelir. Ne yazık ki, bu işlemlerin öldürülmesi genellikle mümkün değildir.


16

Zanchey'in cevabı, IO'yu ne beklediğini bulmak için bildiğim en iyisidir.

Sunucunuzun yoğun yük altında olduğunu söylerken, bununla ne demek istiyorsunuz? Özellikle bir şeyin cevap vermesi yavaş mı?

Eğer Disk IO'nuzun tıkanıklık olup olmadığını merak ediyorsanız, diskin gerçekten ağır yük altında olup olmadığını görmek için iostat komutunu (sysstat paketinin bir parçası) kullanırdım.

Örnek:

[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

1
"Diskin gerçekten ağır yük altında olup olmadığını görmek için iostat" çıktısının nasıl yorumlanacağının açıklanması yararlı olacaktır.
Scott Buchanan

0

Hangi işlemlerin blok okuma / yazma işlemleri yaptığına dair block_dump günlüğünü etkinleştirin :

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

tamamlandığında, izlemeyi devre dışı bırakın, böylece günlük dosyalarınızı spam yapmazsınız:

echo 0 > /proc/sys/vm/block_dump
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.