Yüksek sunucu yükü - [jbd2 / md1-8]% 99,99 IO kullanarak


13

Geçen hafta yükte ani artış oldu. Bu genellikle günde bir veya iki kez olur. İotop'tan [jbd2 / md1-8]% 99,99 IO kullandığını tespit etmeyi başardım. Yüksek yükleme sürelerinde sunucuya yüksek trafik gelmez.

Sunucu özellikleri:

  • AMD Opteron 8 çekirdeği
  • 16 GB RAM
  • 2x2.000 GB 7.200 RPM HDD Yazılım Baskını 1
  • Cloudlinux + Cpanel
  • Mysql doğru ayarlanmış

Sivri uçların dışında, yük genellikle en fazla 0.80 civarındadır.

Etrafta arama yaptım ancak [jbd2 / md1-8] 'nin tam olarak ne yaptığını bulamıyorum. Bu problemi olan veya olası bir çözümü bilen var mı?

Teşekkür ederim.

GÜNCELLEME:

TIME        TID     PRIO     USER    DISK READ    DISK WRITE    SWAPIN  IO       COMMAND
16:05:36     399     be/3    root    0.00 B/s      38.76 K/s    0.00 %  99.99 %  [jbd2/md1-8]

1
en.wikipedia.org/wiki/Journaling_block_device & linux.die.net/man/4/md bunun RAID ile ilgili yazılım olduğunu gösterir.
mbrownnyc

Cevabın için teşekkürler. Bazı kazma yaptıktan sonra yazılım RAID ile ilgili olduğunu buldum. Bunun bir çözümü biliyor musunuz? Sadece bir hafta önce, neredeyse 3 ay boyunca hiçbir sorun çıkmadan başladığı tuhaf şey.
Alex

ES'nin% 99,99 olduğunu nasıl belirlediniz? Kullandın iostatmı Biraz bunun iostat 5için biraz çalıştırabilir ve çıktıyı paylaşabilir misiniz?
slm

İotop için günlüğe kaydetmeyi etkinleştirdim ve yükün gerçekleştiği aralık için günlüğe baktım. Şimdi yük düşük, bu yüzden şimdi çalıştırmanın bir anlamı yok, ancak bir dahaki sefere yapacağım. Cevabın için teşekkürler.
Alex

1
Bu konuya yeni girdim. Son çözümünüz ne oldu?
Satanicpuppy

Yanıtlar:


19

Kesin sebebi vermek için yeterli bağlam olmadığı için bu gerçekten bir cevap değil, ama başıma geldiğinde bunu nasıl izleyebileceğimin bir açıklaması.

jbd2/md0-8Üst kısmında görünmeye devam ettiğimi fark ettim iotop. /sys/kernel/debug/tracing/events/jbd2Ne jbd2yaptığını belirlemek için hangi seçeneklerin bulunduğunu görmek için baktım .

NOT-1: Hata ayıklama izleme olaylarının çıktısını görmek için cat /sys/kernel/debug/tracing/trace_pipe- İzleri etkinleştirirken / devre dışı bırakırken terminalde çalışıyordum.

NOT-2: Olayları izleme amacıyla etkinleştirmek için örn echo 1 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable. Devre dışı bırakmak için echo 0 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable.

Etkinleştirerek başladım /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable- ancak çıktıda özellikle ilginç görünen hiçbir şey yoktu. İzlemek için birkaç olay daha denedim ve etkinleştirdiğimde /sys/kernel/debug/tracing/events/jbd2/jbd2_commit_flushing/enableher saniye gerçekleştiğini gördüm:

# cat /sys/kernel/debug/tracing/trace_pipe
...
jbd2/md0-8-2520  [004] .... 658660.216492: jbd2_commit_flushing: dev 9,0 transaction 32856413 sync 0
jbd2/md0-8-2520  [001] .... 658661.334900: jbd2_commit_flushing: dev 9,0 transaction 32856414 sync 0
jbd2/md0-8-2520  [001] .... 658661.394113: jbd2_commit_flushing: dev 9,0 transaction 32856415 sync 0

Bu sync(2)/ fsync(2)/ ile ilgili msync(2)görünüyordu, bu yüzden bunu bir sürece bağlamak için bir yol aradım ve buldum:

# find /sys/kernel/debug/tracing/events/ | grep sync.*enable
...
/sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable
...

Etkinleştirdiğimde aşağıdaki çıktıyı gördüm:

# cat /sys/kernel/debug/tracing/trace_pipe
...
      nzbget-17367 [002] .... 658693.222288: ext4_sync_file_enter: dev 9,0 ino 301924373 parent 301924357 datasync 1 
  jbd2/md0-8-2520  [001] .... 658693.284080: jbd2_commit_flushing: dev 9,0 transaction 32856465 sync 0
      nzbget-17367 [000] .... 658693.334267: ext4_sync_file_enter: dev 9,0 ino 301924357 parent 301924353 datasync 1 
  jbd2/md0-8-2520  [002] .... 658693.334275: jbd2_commit_flushing: dev 9,0 transaction 32856466 sync 0
      nzbget-17367 [001] .... 658694.369514: ext4_sync_file_enter: dev 9,0 ino 301924367 parent 301924357 datasync 1 
  jbd2/md0-8-2520  [002] .... 658694.414861: jbd2_commit_flushing: dev 9,0 transaction 32856467 sync 0
      nzbget-17367 [001] .... 658694.470872: ext4_sync_file_enter: dev 9,0 ino 301924357 parent 301924353 datasync 1 
  jbd2/md0-8-2520  [002] .... 658694.470880: jbd2_commit_flushing: dev 9,0 transaction 32856468 sync 0

Bu bana süreç adını / kimliğini verdi - ve bu süreçte biraz daha hata ayıklama yaptıktan sonra ( nzbget) fsync(2)her saniye yaptığını keşfettim . Ben onun yapılandırma değiştirdikten sonra ( FlushQueue=no, sanırım, kaynakta buldum) saniye başına bunu yapmak durdurmak fsync(2)için sorun gitti.

Çekirdek 4.4.6-gentoosürümüm. Ben bu olaylarla make oldconfigalmak için çekirdek yapılandırmasında bir noktada etkinleştirdiğim (manuel olarak veya ile ) bazı seçenekler olduğunu düşünüyorum /sys/kernel/debug- eğer yoksa, etkinleştirme hakkında daha fazla bilgi için internete bakmanız yeterli olabilir. o.


Çok güzel. Bu çok yardımcı.
jdhildeb

Tüm süreci detaylandırdığınız için çok teşekkürler!
astrojuanlu

1

Bu bir dergi güncellemesi ile ilgili bir şey gibi görünüyor. RAID yazılımının kaç diskten oluştuğu. Bana onu oluşturmak için kullanılan komutu gösterebilir misin?

Ayrıca dumpe2fs çıktısını yapıştırabilir misiniz? İlk olarak, yük gördüğünüz fiziksel cihazı tanımlayın. Bunu bilmek için df kullanın. Sonra,

dumpe2fs /dev/sdaX > /tmp/dump

Durumunuz için, / dev / md0 olabilir.

Ayrıca, bunu çalıştırın.

iostat -xdk 1 25

Yüksek IO sorunu sırasında.

Cloudlinux'u bilmiyorum ama altında bulunan araç blktrace.


Merhaba Soham, cevabınız için teşekkürler. Dizide 2 disk var. Dumpe2fs'ye gelince, lütfen çalıştırmamı istediğiniz tam komutu bana verebilir misiniz? Yardım için teşekkürler.
Alex

Alex, cevabı düzenledi.
Soham Chakraborty

Unutmayın şapka bu gerçekten disklerden herhangi bir orta perforamnce kurulum değil - "bir iş istasyonu kadar yavaş" daha açıklar.
TomTom
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.