İşlem başına disk G / Ç kullanımı nasıl kontrol edilir


45

Durmakta olan bir Linux sistemiyle ilgili bir sorun yaşıyorum ve disk g / Ç kullanımı, ortalama servis süresi ve sistemin durduğu andaki ortalama bekleme süresini bildirmek için sysstat / sar buldum.

Bir dahaki sefere bu süreçte hangi sürecin bu zirvelere neden olduğunu nasıl belirleyebilirim?
Sar ile yapmak mümkün mü (yani: Bu bilgiyi kayıtlı alreade sar dosyalarından bulabilir miyim?

"Sar-d" için çıktı, sistem durması 12.58-13.01pm civarında gerçekleşti.

12:40:01          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
12:40:01       dev8-0     11.57      0.11    710.08     61.36      0.01      0.97      0.37      0.43
12:45:01       dev8-0     13.36      0.00    972.93     72.82      0.01      1.00      0.32      0.43
12:50:01       dev8-0     13.55      0.03    616.56     45.49      0.01      0.70      0.35      0.47
12:55:01       dev8-0     13.99      0.08    917.00     65.55      0.01      0.86      0.37      0.52
13:01:02       dev8-0      6.28      0.00    400.53     63.81      0.89    141.87    141.12     88.59
13:05:01       dev8-0     22.75      0.03    932.13     40.97      0.01      0.65      0.27      0.62
13:10:01       dev8-0     13.11      0.00    634.55     48.42      0.01      0.71      0.38      0.50

Bu, dün başlattığım bir konuyu takip eden bir soru: Yük ve disk bloğundaki ani tepeler beklemede , sorunu henüz çözemediğim için konuyla ilgili yeni bir konu / soru oluşturduğumu umuyorum.


Sorunun daha az belirli bir işlem ve daha fazla ara sıra tepki göstermeyen bir disk olabileceği anlaşılıyor. Diskler, sistem düzeyinde, sistemin çarptığı uçurumlar gibi görünen bu tür şeyleri yapar. Hiçbir suçlu bulamazsanız, disk alt sistemini inceleme zamanı gelmiştir.
slashdot



Yanıtlar:


45

Bir sonraki pik kullanım süresini yakalayacak kadar şanslıysanız, iotop kullanarak işlem başına G / Ç istatistiklerini etkileşimli olarak çalışabilirsiniz .


Hey teşekkürler! Benim alet kutusunda saklamak için başka bir inek oyuncak. :-)
Janne Pikkarainen

Toplu modda iotop çalıştırmak yukarıdaki "ps -eo" çözümü için çok iyi bir tamamlayıcı / değiştirme olabilir. Teşekkürler!
Avada Kedavra

2
Müthiş, "iotop -n 1 -b -o" tam olarak ihtiyacım olan çıktıyı sağlıyor. Teşekkürler!
Avada Kedavra

Bu çalıştırmak için sisteme kök erişimi gerektirir gibi görünüyor
user5359531

29

Bu komut ile her 20 saniyede bir işlem başına biriken io istatistiklerini yazdırmak için pidstat'ı kullanabilirsiniz :

# pidstat -dl 20

Her satırda sütunlar sütun olacak:

  • PID - işlem kimliği
  • kB_rd / s - Görevin saniyede diskten okunmasına neden olduğu kilobayt sayısı.
  • kB_wr / s - Görevin neden olduğu kilobayt sayısı veya saniyede diske yazılmasına neden olur.
  • kB_ccwr / s - Diske yazma işlemi görev tarafından iptal edilen kilobayt sayısı. Bu, görev bir miktar kirli sayfa önbelleği kesdiğinde oluşabilir. Bu durumda, başka bir görevin hesaba katıldığı bazı GÇ gerçekleşmeyecek.
  • Komut - Görevin komut adı.

Çıktı şöyle görünür:

05:57:12 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:32 PM       202      0.00      2.40      0.00  jbd2/sda1-8
05:57:32 PM      3000      0.00      0.20      0.00  kdeinit4: plasma-desktop [kdeinit]              

05:57:32 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:52 PM       202      0.00      0.80      0.00  jbd2/sda1-8
05:57:52 PM       411      0.00      1.20      0.00  jbd2/sda3-8
05:57:52 PM      2791      0.00     37.80      1.00  kdeinit4: kdeinit4 Running...                   
05:57:52 PM      5156      0.00      0.80      0.00  /usr/lib64/chromium/chromium --password-store=kwallet --enable-threaded-compositing 
05:57:52 PM      8651     98.20      0.00      0.00  bash 

05:57:52 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:58:12 PM       202      0.00      0.20      0.00  jbd2/sda1-8
05:58:12 PM      3000      0.00      0.80      0.00  kdeinit4: plasma-desktop [kdeinit]              

10

Devam eden izlemeden daha fazla hiçbir şey atmaz, olaydan sonra zamana duyarlı verileri alamazsınız ...

Eğer birkaç şey vardır olabilir ima veya bununla ortadan kaldırmak için kontrol edebilmek - /procarkadaşın.

sort -n -k 10 /proc/diskstats
sort -n -k 11 /proc/diskstats

Alanlar 10, 11 biriktirilmiş yazılı kesimler ve biriktirilmiş zaman (ms) yazılır. Bu, sıcak dosya sistemi bölümlerinizi gösterir.

cut -d" " -f 1,2,42 /proc/*/stat | sort -n -k +3

Bu alanlar PID, komut ve kümülatif IO-wait keneleridir. Bu, yalnızca hala çalışıyor olsalar bile, sıcak işlemlerinizi gösterir . (Muhtemelen dosya sisteminizin günlük arama konularını görmezden gelmek istersiniz.)

Yukarıdakilerin faydası, çalışma süresine, uzun süren işlemlerinizin yapısına ve dosya sistemlerinizin nasıl kullanıldığına bağlıdır.

Uyarılar: 2.6 öncesi çekirdekler için geçerli değildir, emin değilseniz belgelerinizi kontrol edin.

(Şimdi gidip geleceğinize bir iyilik yapın, Munin / Nagios / Cacti / whatever ;-) yükleyin


10

Kullanın atop. ( http://www.atoptool.nl/ )

Verileri atopdaha sonra etkileşimli bir tarzda okuyabilen sıkıştırılmış bir dosyaya yazın . Her 10 saniyede bir okuma (delta) yapın. 1080 kez yapın (3 saat; eğer unutursanız, çıktı dosyası sizi diskten çalıştırmaz):

$ atop -a -w historical_everything.atop 10 1080 &

Kötü bir şey tekrar yaptıktan sonra:

(hala arka planda çalışıyor olsa bile, her 10 saniyede bir ekler)

% atop -r historical_everything.atop

Siz deyince, 3 tuşa basardım: tdD

t - move forward to the next data gathering (10 seconds)
d - show the disk io oriented information per process
D - sort the processes based on disk activity
T - go backwards 1 data point (10 seconds probably)
h - bring up help
b - jump to a time (nearest prior datapoint) - e.g. b12:00 - only jumps forward
1 - display per second instead of delta since last datapiont in the upper half of the display

4

Kullanın btrace. Örneğin kullanımı kolaydır btrace /dev/sda. Komut mevcut değilse, muhtemelen blktrace paketinde mevcuttur .

EDIT : Hata ayıklayıcıları çekirdekte etkin olmadığından, deneyebilir date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtfveya benzer. Günlük sayfa hataları, btrace kullanmakla aynı elbette değildir, ancak şanslıysanız disk aç işlemleri hakkında size biraz ipucu verebilir. En yoğun G / Ç sunucularımdan birinin ve çok fazla G / Ç kullandığımı bildiğim işlemleri içeren listeyi denedim.


Merhaba Janne, çekirdek maalesef hata ayıklama dosya sistemi ile derlenmedi ve canlı bir sistem bu yüzden çekirdeği yeniden derleyemiyorum. Yeniden derlemeden bunu yapmanın başka bir yolu var mı?
Avada Kedavra

Tamam, cevabımı biraz düzenledi :)
Janne Pikkarainen

Harika, şimdi bir yerlere geliyoruz! Bunu bir cronjob'a sokmayı ve sar cron işi ile aynı anda çalıştırmayı düşünüyorum. Ardından, sunucu bir daha durduğunda, hangi işlemlerin / işlemlerin artan sayfa hatası oranına sahip olduğunu görmek için sayfa hatalarının oranını karşılaştırabilmeliyim. Sanırım şanssız olabilir ve durak sırasındaki tüm işlemler için diskte bir artış görebilirim, ama kesinlikle denemeye değer. Teşekkürler Janne! (Yapabilseydim, cevabınıza oy verirdim: S)
Avada Kedavra

Rica ederim. Nasıl geçtiğini bana bildirin, bu benden yaratıcı bir problem çözme girişimi idi. :-)
Janne Pikkarainen

İotop çıktısının yorumlanması daha kolaydır, bu nedenle hasta bu çözümü kabul eder. Bunu yapacak kadar rep kazanır kazanmaz yanıtlayana oy vermeye geri döneceğim. Desteğin için teşekkürler!
Avada Kedavra
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.