Yolcu

2011-01-31 15 views
6

üzerinde çalışan tüm yakut iş parçacığı üzerinde yığın izini nasıl elde ederim Nginx/yolcu üzerinde çalışan bir üretim yakut sinatra uygulaması var ve sık sık isteklerin anlaşılır olarak durdurulduğunu görüyorum. Her 10 saniyede bir küme makinemde yolcu statüsünü aramak için bir senaryo yazdım ve sonuçları bir grafik üzerinde çizdim.Yolcu

enter image description here

mavi çizgi bu 4 makineler arasında bir ortalamadır 60'a sürekli yükseliyor bekleyen küresel kuyruğu gösterir, mavi çizgi 60 çarptığında, böylece her makine belirlenmiş durumda şu anlama gelir: Bu benim gördüğüm bu dışarı. Şu anki yolcu_max_pool_size değerini 20'ye ayarlıyorum, bu yüzden maksimum havuz boyutunu 3 katına çıkarmak ve ardından muhtemelen sonraki istekleri düşürmek.

Uygulamam, iki önemli dış kaynağa - bir Amazon RDS mysql arka tarafına ve bir Redis örneğine - bağlıdır. Belki bunlardan biri periyodik olarak yavaşlıyor ya da tepkisizleşiyor ve dolayısıyla bu davranışa neden oluyor?

Buradaki darboğazın Amazon RDS, Redis ya da başka bir şey olup olmadığını görmek için nasıl bir yığın izlemesi yapılacağı konusunda bana tavsiyede bulunabilir mi?

Teşekkürler!

cevap

4

Bunu çözdüm - Redis'te bir defada ateş eden bir SAVE config parametresi vardı. Açıkça, redis'in forking/saving işlemleri benim app için bloke ediyor. Yapılandırma parametresini "3600 1" olarak değiştirdim, yani veritabanımı yalnızca bir saatte kaydettim, bu da tamam bir önbellek olarak kullanıyorum (veriler MYSQL'de devam ediyor).

+0

Ben bekleyen ne kadar sürdüğünü biliyor musunuz? AFAIK, otomatik kaydetme arka planda olmalı ve sadece 300ms üst olması gereken bellek sayfalarını kopyalarken gecikmelidir. – seppo0010

+0

Ampirik olarak, redis düğümümün birkaç saniyeliğine engellenebileceği görünmüyor, 60 saniyelik bir periyotta 5 -10 saniyelik engellemeyi gördüm. Ben bir köleyi sıkmaya ve kurtarmak için köleyi kullanmaya çalışacağım. – esilver

0

Asıl sorunuzu yanıtlamak için, yolcunun taşıdığı çalışan yakut işlemleri için "tüm yığın izleri" elde etmek mümkündür. Temelde her birine SIGOUT mesaj göndermek ve onlar apache/nginx günlük dosyası içine, ex tüm geriye dönük izleme tükürmek gerekir:

https://gist.github.com/rdp/905759f88134229c2969b9f242188615