httpd
( Apache/2.2.29
) 메모리 사용에 문제가 있습니다.
시간이 지남에 따라 httpd
프로세스의 메모리 사용량은 결국 100 %가 될 때까지 증가합니다.
마지막으로 다시 시작한 httpd
것은 약 24 시간 전이었습니다. 출력 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
그것이 확실하다는 것을 증명하기 위해 httpd
다시 시작 httpd
하고 free -m
다시 실행 했습니다.
[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
따라서 Apache를 다시 시작하면 사용 가능한 메모리가 239Mb에서 894Mb로 늘어납니다 . 이는 큰 도약 처럼 보입니다 .
나는 현재 활성화 된 Apache 모듈 (많은 것이 있음)과 비활성화 / 제거 mod_wsgi
및 mod_perl
PHP 기반 웹 응용 프로그램 인 Magento를 실행하는이 서버에 필요하지 않은 목록을 검토했습니다.
을 바탕으로 https://servercheck.in/blog/3-small-tweaks-make-apache-fly , 내가 실행 한 ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
및 다음과 같은 출력을 얻을 :
[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
제안 된 다른 진단 도구를 실행하면 다음 MaxClients
이 ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
반환됩니다.
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB
이 서버 (Amazon AWS m1.small
인스턴스)에는 1.7 Gb
RAM이 있습니다. 그러므로:
httpd
설정 을 조정하는 가장 좋은 방법 또는 정확히 원인을 진단하는 방법 에 대한 추가 정보 / 제안 사항은 무엇입니까?
답변
그것을 ‘해결’하기 위해 내가 한 일이 있습니다.
- 세트
MaxClients 7
(기준(1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748
)
따라서:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 7
MaxRequestsPerChild 4000
</IfModule>
-
를 제외한 모든 아파치 모듈을 사용하지 않도록 설정
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
-
mod_ssl
클라이언트가 전혀 사용하지 않으므로 패키지를 제거하십시오https://
.
이 새로운 구성이 한동안 실행되어 다시 해결되는지 확인하겠습니다.
여기에서 영감을 얻었습니다 : http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/ 및 http://www.activoinc.com/ 다운로드 /httpd.conf-magento
답변
MaxRequestsPerChild 옵션이 정의 된 수의 요청 후에 프로세스 재활용을 가능하게하므로 메모리 누수가 있지만 더 이상 보이지 않으므로 옵션 MaxRequestsPerChild가 도움이되었습니다.
또한 : MaxClients = ServerLimit * ThreadsPerChild
귀하의 경우 7 명의 동시 사용자 (MaxClients = 7) 만 필요하면 2 개의 프로세스로 충분합니다 (중단 시간을 최소화하지 못하는 경우를 대비하여). 구성은 다음과 같습니다.
<IfModule prefork.c>
StartServers 2
MinSpareServers 2
MaxSpareServers 20
ServerLimit 2
MaxClients 8
ThreadsPerChild 4
MaxRequestsPerChild 4000
</IfModule>
MaxClients 8을 사용 하여 두 프로세스간에 더 균등 한 요청을 배포합니다.