Finansal modelleme yapan ağır bir Drupal web sitesi işletiyoruz. Apache işlemlerinin sayısı sabit kalırken, apache tarafından kullanılan belleğin fazla mesaisi arttığı gerçeği göz önüne alındığında, bir tür bellek sızıntısıyla karşılaşıyoruz:
Bellek sorununun apache / PHP'den geldiğini biliyoruz çünkü her yayınladığımızda /etc/init.d/httpd reload
bellek kullanımı düşer (yukarıdaki ekran görüntüsüne ve CLI çıktılarının altına bakın):
Httpd yeniden yüklemeden önce
ücretsiz toplam kullanılan ücretsiz paylaşılan arabellekler önbelleğe alındı Mem: 49447692 45926468 3521224 0 191100 22609728 - / + tamponlar / önbellek: 23125640 26322052 Takas: 2097144 536552 1560592
Httpd yeniden yüklendikten sonra
ücretsiz toplam kullanılan ücretsiz paylaşılan arabellekler önbelleğe alındı Mem: 49447692 28905752 20541940 0 191360 22598428 - / + tamponlar / önbellek: 6115964 43331728 Takas: 2097144 536552 1560592
Her apache iş parçacığına memory_limit
512MB değerinde bir PHP atanır , bu da yüksek bellek kullanımının düşük istek hacmini ortadan kaldırdığını ve max_execution_time
yürütmenin daha uzun sürdüğü iş parçacıklarını sonlandırması gereken ve bu nedenle bellek kullanımında sürekli büyümeyi önlemesi gereken 120 saniyelik bir atandı. görme.
S: Bu bellek sızıntısına neyin sebep olduğunu nasıl araştırabiliriz?
İdeal olarak, dev ekibini rahatsız etmeden sistemde gerçekleştirebileceğim sorun giderme adımlarını arıyorum.
İlave bilgi:
OS: RHEL 5.6
PHP: 5.3
Drupal: 6.x
MySQL: 5.6
FYI ayrı ayrı araştırdığımız takas sorununun farkındayız ve takas oluşmaya başlamadan önce gözlemlediğimiz bellek sızıntısıyla ilgisi yok.
memcached
kütüphanesini kullanıyoruz . Memcache yönetici sayfasına dayanarak, memcache.php
görebildiğimiz tek şey 5GB
memcache'e tahsis edilmiş olduğumuzdur 3.3GB
. Burada bize daha fazla yardımcı olabilirseniz harika olurdu.
memcached
arka plan programının kendisi muhtemelen gayet iyi. Bu bellek sızıntı olabilir veya olmayabilir (ve böylece Apache süreçleri bellek kullanımı büyür) PHP memcache kütüphanesidir. Benim sorunum yaklaşık 1-2 yıl önceydi, bu yüzden bundan sonra işler düzeltilmiş olabilir. Her neyse, memcached sizin için zorunlu değilse, bir süreliğine devre dışı bırakmayı deneyin ve Apache bellek kullanımının hala büyüyüp büyümediğine bakın.
httpd
, bellek kullanımının büyümeye devam etmesi ve kutunun sonunda bazı bellek çekirdeği mesajlarıyla çökmesidir . Performanslar iyidir (bellek kullanımı bellek sınırına yaklaşana kadar). Lütfen takas sorununu dikkate almayın.