2010-06-28 20 views
5

benim Ruby on Rails app (v2.3.8) ile collectiveidea's delayed_job kullanılarak ve bir 8 GB RAM Slicehost makinesine (Ubuntu 10,04 LTS Apache 2) üzerine onunla yaklaşık 40 arkaplan işleri koşuyorum.Gecikmeli İşler hafıza sızdırıyor mu?

ı hiçbir işçi çalıştıran benim sunucusuna ssh diyelim. Ben free -m yaptığınızda, genellikle 8 üzerinden yaklaşık 1 GB RAM kullanıyorum görüyorum. Sonra işçiler başladıktan sonra ve kod tarafından kullanılmak üzere bir dakika bekledikten sonra, ben yaklaşık 4GB kadar. Bir veya iki saat içinde geri dönersem, 8GB'lık ve takas belleğimde olacağım ve web sitem 502 hatası üretecek.

Şimdiye kadar sadece işçinin ölümüne ve onları yeniden başlatmadan, ama yerine sorunun kök tamir edeceklerini oldum. Düşüncesi olan var mı? Bu bir bellek sızıntısı mı? Ya da bir arkadaşın önerdiği gibi, çöp toplama işlemini yürütmenin bir yolunu bulmam gerekecek mi?

+0

Bu bir bellek sızıntısı gibi geliyor mesele, ama deleayed_job tarafından çalıştırılan kodunuzda olabilir, delayed_job içinde olmamalıdır. gözden geçirmeniz gereken bazı kodlar yardımcı olabilir. – jigfox

+0

da unutmayın, 1.9 ve 1.8 hiçbir zaman OS'ye geri bellek vermeyecektir. – tliff

cevap

-3

Hemen her kimse bunun hakkında sorduğunda, sorun onların kodundadır. İşinizin nerede sızdığını bulmak için mevcut profil araçlarından birini kullanmayı deneyin. (https://github.com/wycats/ruby-prof veya benzeri.)

Her işin sonunda GC'yi tetiklemek, veriminizi bozma maliyetiyle maksimum bellek kullanımınızı azaltacaktır. Ruby'nin herhangi bir işin gerektirdiği maksimum boyuta kadar şişmesini engellemez, ancak Ruby belleği OS'ye geri yükleyemez. Bu yaklaşımı önermiyorum. Modellerinizin özelliklerini tefrika varsa