Masz problemy z użyciem pamięci httpd
( Apache/2.2.29
).
Z biegiem czasu zużycie pamięci w httpd
procesach wzrasta, aż ostatecznie osiąga 100%.
Ostatnim razem wznowiłem pracę httpd
około 24 godzin temu. Dane wyjściowe free -m
to:
[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
Aby udowodnić, że to zdecydowanie httpd
, ponownie uruchomiłem httpd
i uruchomiłem free -m
ponownie:
[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
Ponowne uruchomienie Apache zabiera wolną pamięć z 239 Mb do 894 Mb - co wydaje się dużym skokiem.
Przeglądałem listę aktualnie włączonych modułów Apache (jest ich całkiem sporo) i wyłączono / usunąłem ( mod_wsgi
i mod_perl
żaden z nich nie jest wymagany dla tego serwera, na którym działa aplikacja webowa oparta na PHP - w szczególności Magento).
Na podstawie https://servercheck.in/blog/3-small-tweaks-make-apache-fly , uruchomiłem ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
i otrzymałem następujące dane wyjściowe:
[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
Uruchomienie innego sugerowanego narzędzia diagnostycznego, dla MaxClients
którego ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
zwraca następujące informacje:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB
Ten serwer ( m1.small
instancja Amazon AWS ) ma 1.7 Gb
pamięć RAM. Więc dlatego:
Wszelkie dalsze wskazówki / sugestie, jak najlepiej dostosować httpd
ustawienia lub jak zdiagnozować, co dokładnie może być przyczyną tego?
źródło
-/+ buffers/cache
linię; jednak w tym przypadku zmiana jest porównywalna. W zależności od tego, jak apache został dostrojony, może rozpocząć się od kilku procesów gotowych do obsługi żądań; po okresie wielu jednoczesnych żądań prawdopodobnie rozwinie się więcej procesów do obsługi obciążenia. Można także dostosować liczbę bezczynnych procesów. Więc jeśli apache rośnie, aby zużywać zbyt dużo pamięci, musisz dokonać strojenia.nginx
więc może czas spróbować, ale szczerze mówiąc, używam Apache od lat i nigdy nie miałem większych problemów. Magento naprawdę przeżuwa pamięć.grep httpd
-process (przynajmniej dla mnie). Aby to naprawić,ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
Odpowiedzi:
Oto, co zrobiłem, aby go „rozwiązać”:
MaxClients 7
(na podstawie(1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748
)W związku z tym:
Wyłączyć wszystkie moduły Apache wyjątkiem
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
Usuń
mod_ssl
pakiet, ponieważ klient whttps://
ogóle nie korzysta .Poinformuję cię, gdy ta nowa konfiguracja zacznie działać, aby zobaczyć, czy to rozwiąże problem.
Pewna inspiracja tutaj została zapożyczona z: http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/ i http://www.activoinc.com/ pliki do pobrania / httpd.conf-magento
źródło
httpd
wydają się zniknąć całkowicie.Obawiam się, że opcja MaxRequestsPerChild pomogła w twoim przypadku, ponieważ umożliwia recykling procesów po określonej liczbie żądań, więc wyciek pamięci jest, ale już nie jest widoczny.
Dodatkowo: MaxClients = ServerLimit * ThreadsPerChild
W twoim przypadku, jeśli potrzebujesz tylko 7 równoczesnych użytkowników (MaxClients = 7), wystarczy 2 procesy (na wypadek, gdyby nie udało się zminimalizować przestojów), więc konfiguracja może być:
Korzystam z MaxClients 8 , tylko po to, aby uzyskać bardziej równomierny rozkład żądań między 2 procesami.
źródło