httpd bellek kullanımı


13

httpd( Apache/2.2.29) Bellek kullanımı ile ilgili bazı problemler .

Zamanla, httpdişlemlerde bellek kullanımı sonunda% 100'e kadar sürünür.

En son yeniden başlatmam httpdyaklaşık 24 saat önceydi. Çıktı kaynağı free -m:

[ec2-user@www ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          1655       1415        239          0        202        424
-/+ buffers/cache:        788        866
Swap:         1023          4       1019

Kesinlikle kanıtlamak için httpdyeniden başladım httpdve free -mtekrar koştum :

[ec2-user@www ~]$ sudo service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[ec2-user@www ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          1655        760        894          0        202        360
-/+ buffers/cache:        197       1457
Swap:         1023          4       1019

Yani, Apache'yi yeniden başlatmak 239 Mb'dan 894 Mb'a boş hafıza alıyor - bu büyük bir sıçrama gibi görünüyor .

Şu anda etkin Apache modülleri (çok var) listesi üzerinden geçiyor ve devre dışı / kaldırıldı mod_wsgive mod_perl(ikisi de PHP tabanlı bir web uygulaması - özellikle Magento çalıştıran bu sunucu için gerekli).

Https://servercheck.in/blog/3-small-tweaks-make-apache-fly dayanarak ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}', aşağıdaki çıktıyı alıp aldım :

[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}' 15.1328 MB 118.09 MB 127.449 MB 129.059 MB 117.734 MB 113.824 MB 125.062 MB 123.922 MB 119.855 MB 108.066 MB 136.23 MB 114.031 MB 113.27 MB 110.695 MB 102.113 MB 113.234 MB 186.816 MB 118.602 MB 0.835938 MB

Diğer önerilen tanı aracı Çalıştırmak için MaxClientshangi ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'döndürür şu:

[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB

Bu sunucuda (Amazon AWS m1.smallörneği) 1.7 GbRAM vardır. Yani bu nedenle:

httpdAyarların en iyi nasıl ayarlanacağı veya tam olarak neye neden olabileceğini teşhis etmek için başka işaretçiler / öneriler ?


Bellek kullanımını süreçlere göre kontrol etmek için -/+ buffers/cachehatta bakmanız gerektiğini unutmayın ; ancak bu durumda değişiklik karşılaştırılabilir. Apache'nin nasıl ayarlandığına bağlı olarak, istekleri işlemeye hazır birkaç işlemle başlayabilir; birçok eşzamanlı istek süresinden sonra, muhtemelen yükün üstesinden gelmek için çatallanmış daha fazla işlem olacaktır. Boşta kalan işlemlerin sayısı da ayarlanabilir. Bu yüzden apache çok fazla bellek kullanmak için büyürse, biraz ayar yapmanız gerekir.
wurtel

Apache sunucu yapılandırmasında iyiyim, ancak geçmişte Apache için performans ayarı açısından çok fazla şey yapmadım. Hangi direktiflere bakmam veya yönlendirmem gerektiğine dair herhangi bir öneriniz var mı? Apache'ye çatallı süreçleri belirli bir süre sonra öldürmesini söyleyebileceğim bir yapılandırma ayarı var mı? (Görünüşe göre Apache bunu bir nedenden dolayı varsayılan olarak yapmıyor.)
James Spittal

Apache'den uzaklaşmamın tam nedeni budur ... Nginx ve hatta Lighttpd'yi deneyin.

İlginç. Hakkında iyi şeyler nginxduymuş olabiliriz, belki de denemenin zamanı geldi, ama dürüst olmak gerekirse, Apache'yi yıllardır kullanıyorum ve hiçbir zaman büyük problemler yaşamadım. Magento gerçekten hafızayı çiğniyor.
James Spittal

1
Ortalama bellek kullanımını hesaplamak için betiğinizin grep httpd-process'in düşük bellek kullanımını içerdiğini unutmayın (en azından benim için). Bunu düzeltmek için bu satırı aşağıdaki gibi hesaplama dışında tutmanızı tavsiye ederim:ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
MaPePeR

Yanıtlar:


12

İşte bunu 'çözmek' için yaptığım şey:

  1. Set MaxClients 7(bazda (1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748)

Bu nedenle:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients         7
MaxRequestsPerChild  4000
</IfModule>
  1. Dışındaki tüm Apache modüllerini devre dışı bırakın authz_host_module, log_config_module, expires_module, deflate_module, setenvif_module, mime_module, autoindex_module, negotiation_module, dir_module, alias_module, rewrite_module,php5_module

  2. mod_sslİstemci herhangi bir şekilde kullanmadığı için paketi kaldırın https://.

Bu yeni yapılandırmanın bir süredir çalışıp çalışmadığını çözüp çözmediğini görmek için rapor vereceğim.

Burada bir miktar ilham alındı: http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/ ve http://www.activoinc.com/ indirme / httpd.conf-magento


Yukarıdaki yapılandırma kesinlikle büyük ölçüde yardımcı oldu.
James Spittal

1
Birkaç gün sonra, 'hafıza sızıntısı' sorunları httpdtamamen ortadan kalkmış gibi görünüyor.
James Spittal

2

Korkarım seçeneği MaxRequestsPerChild , tanımlanmış sayıda istek sonrasında işlem geri dönüşümünü etkinleştirdiğinden, bellek sızıntısı var, ancak artık görünmüyor.

Ayrıca: MaxClients = ServerLimit * ThreadsPerChild

Durumunuzda sadece 7 eşzamanlı kullanıcıya ihtiyacınız varsa (MaxClients = 7) 2 işlemle tamamen yeterlidir (arıza süresini en aza indiremezse), yapılandırma şu şekilde olabilir:

<IfModule prefork.c>
StartServers       2
MinSpareServers    2
MaxSpareServers   20
ServerLimit        2
MaxClients         8
ThreadsPerChild    4
MaxRequestsPerChild  4000
</IfModule>

Kullandığım MaxClients 8 sadece 2 süreçler arasında daha eşit istek dağılımını yapmak.

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.