yüksek yük sunucunun askıda kalmasına ve hata "120 saniyeden fazla bloke" neden olabilir?


17

Şu anda birkaç VM ve 'baremetal' sunucu çalışıyor. Java yüksek -% 400'ün üzerinde + zaman zaman çalışıyor. Rastgele sunucu konsolda "java - 120 saniyeden fazla bloke" - kjournald, vb.

Bir nedenden dolayı bu hata sadece konsola yazıyor, çünkü bu uzaktan barındırıldığı için erişemediğim bir dmesg çıktısı alamıyorum. bu yüzden tam bir iz kopyalayamıyorum.

Bunun olduğu ortamı değiştirdim - fiziksel sunucu bile ve hala oluyor.

Bu http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Technical_Notes/deployment.html uyarınca yanlış bir pozitif olması durumunda hung_task_timeout_secs değerini 0 olarak değiştirdim .

Ayrıca, irqbalance yüklü değil, belki de yardımcı olur?

Bu Ubuntu 10.04 64bit - en son 2.6.38-15 sunucusu ve 2.6.36 ile aynı sorun.

cpu veya bellek sorunları olabilir / takas kalmadı bu soruna neden olabilir?

İşte konsol mesajı:

[58Z?Z1.5?Z840] INFUI task java:21547 blocked for more than 120 seconds.
[58Z?Z1.5?Z986] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.
[58Z841.5?Z06Z] INFUI task kjournald:190 blocked for more than 120 seconds.
[58Z841.5?Z336] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.
[58Z841.5?Z600] INFUI task flush-202:0:709 blocked for more than 120 seconds.
[58Z841.5?Z90?] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.
[58Z841.5?3413] INFUI task java:21547 blocked for more than 120 seconds.
[58Z841.5?368Z] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.
[58Z961.5?ZZ36] INFUI task kjournald:60 blocked for more than 120 seconds.
[58Z961.5?Z6Z5] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.
[58Z961.5?31ZZ] INFUI task flush-202:0:709 blocked for more than 120 seconds.
[58Z961.5?3393] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.

Yanıtlar:


15

Evet, olabilir.

Bunun anlamı oldukça açıktır: çekirdek görevi 120 saniye boyunca planlayamadı. Bu, genellikle disk erişimi etrafında kaynak açlığını gösterir.

irqbalanceyardımcı olabilir, ama bu belli değil. Bu mesajın çevresini, dmesgözellikle onu takip eden yığın izlemesini sağlayabilir misiniz?

Dahası, bu yanlış bir pozitif değildir . Bu, görevin sonsuza dek asıldığını ve ifadenin tamamen doğru olduğunu söylemez . Bu sizin için bir sorun olduğu anlamına gelmez ve herhangi bir kullanıcı etkisi fark etmezseniz görmezden gelmeye karar verebilirsiniz.

Bunun nedeni:

  • CPU sorunu (veya daha doğrusu, bu inanılmaz derecede imkansız bir donanım arızası olabilir),
  • bir bellek sorunu (çok olası bir donanım arızası, ancak birden çok kez olmaz; bir işlem olarak RAM eksikliği olmaz oom-killed),
  • takas eksikliği ( oom-killertekrar).

Bir dereceye kadar, bunu RAM'de önbelleğe alma veri sisteminden mahrum bırakmanın daha fazla G / Ç'ye neden olacağı anlamında bir bellek eksikliğine neden olabilir. Ama bu "hafızanın bitmesi" kadar basit değil.


/ Var / log / dmesg'e kaydedilen bir şey yok, bu yüzden Konsol'un gösterdiği şeyi yapıştırdım .. Bu göründüğünde sistem% 100 asılı.
Tee

Bu ileti çekirdekten gelir, dmesgbu komut (yeterince yakın zamanda günlüğe kaydedilmişse), bu komut çekirdek günlüğü halka arabelleğini yazdırdığından görünür . Umarım syslogkurulumunuz da bir yere giriş yapar /var/log, ancak nerede olduğunu bilmiyordum.
Pierre Carrier

Mesajı olacak DEĞİL görünebilir /var/log/dmesg, ancak olabilir çalıştırdığınızda açmak dmesgkomutu. Dosya, önyükleme işlemi sırasında oluşturulur ve genellikle yalnızca önyükleme zamanı çekirdek iletilerini yakalar (aksi takdirde çekirdek halka arabelleğinden dışarı kayar. Ayrıca sysstat, bildirildiği gibi yükleme / etkinleştirme ve kaynak kullanımını da görebilirsiniz. Muhtemelen takas ile ilgili I / O / iowait (sysstat bunu tanımlamaya yardımcı olacaktır)
Dr. Edward Morbius

@ Dr.EdwardMorbius Peki bunu nasıl düzeltebiliriz? Yakın zamana kadar bir üretim ortamında harika çalışan Zimbra sunucumuzla bu konuda büyük bir sorun yaşıyorum.
Mart'ta Lopsided

@Lopsided: Gecikme için özür dilerim, sık sık burada değilim. Kısaca: Java işleminizin profilini oluşturmalı ve neden askıda olduğunu öğrenmelisiniz. Çöp toplama, ayarlamada sorunlar (ve başarılar) yaşadığım bir alandır. JVM çöp toplama ergodymics'e bakın ve oracle.com/technetwork/java/javase/gc-tuning-6-140523.html Yığın artışının önemli ölçüde yardımcı olduğunu gördüm.
Dr. Edward Morbius

6
sudo sysctl -w vm.dirty_ratio=10
sudo sysctl -w vm.dirty_background_ratio=5

Ardından değişikliği şu şekilde yapın:

sudo sysctl -p

benim için çözdü ....


6
Bu ayarların her birinin ne yaptığını açıklamalısınız.
kasperd

6
Bu, docker ortamında yaşadığım benzer bir sorunu düzeltti. Burada bir açıklama buldum: blackmoreops.com/2014/09/22/… . "Varsayılan olarak Linux, dosya sistemi önbelleğe almak için kullanılabilir belleğin% 40'ına kadar kullanır. Bu işarete ulaşıldıktan sonra dosya sistemi, tüm kalan IO'ların senkronize olmasına neden olan tüm olağanüstü verileri diske temizler. Bu verileri diske aktarmak için bu varsayılan olarak 120 saniyelik bir zaman sınırı. Bu durumda, GÇ alt sistemi verileri akıtmak için yeterince hızlı değil ... "
Peter M

2

Kısa süre önce Üretim kümelerimizden birinde bu hatayı yaşadım:

11 Kasım 14:56:41 xxx çekirdek: INFO: görev xfsalloc / 3: 2393 120 saniyeden fazla engellendi.

11 Kasım 14:56:41 Xxxx çekirdeği: Kirli değil 2.6.32-504.8.1.el6.x86_64 # 1

Kasım 11 14:56:41 xxx: "echo 0> / proc / sys / kernel / hung_task_timeout_secs" bu mesajı devre dışı bırakır.

..

Sar günlüklerinin daha fazla doğrulanması üzerine, IO bekleme süresi aynı zamanda arttı

Ve Donanım (Fiziksel Diskler) kontrol edildiğinde, orta hatalar ve diğer SCSI Hataları, tahsis edilecek kaynakların eksikliği nedeniyle IO'ları bloke eden Fiziksel Disklerden birinde oturum açmıştı.

11/11/15 19:52:40: sonlandırılmış pRdm 607b8000 flags = 0 TimeOutC = 0 RetryC = 0 İstek c1173100 Yanıtla 60e06040 iocStatus 0048 retryC 0 devId: 3 devFlags = f1482005 iocLogInfo: 31140000

11/11/15 19:52:40: DM_ProcessDevWaitQueue: İşlem devId = x için görev mgmt 11/11/15 19:52:40: DM_ProcessDevWaitSueue: devId = x işleminde görev mgmt

Bu, kümemizdeki donanım hatasından kaynaklanıyordu.

Çekirdek dosya olup olmadığını ve ayrıca ipmi yardımcı programı varsa, sorunu kontrol etmek için ipmiutil / ipmitool sel elist komutunu kontrol ederseniz iyi olur.

Saygılarımızla, VT


0

Bulut sağlayıcınızın izleme arayüzüne gidebilir ve depolama alanınız için belirtilen maksimum IOps'u aşmadığınızı kontrol edebilirsiniz, bu da önbellek verilerini temizlemenin neden uzun zaman aldığını açıklar.
Maksimum GÇ'leri depolama özellikleri sayfanızda bulabilirsiniz.

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.