httpd 메모리 사용량 [ OK

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_wsgimod_perlPHP 기반 웹 응용 프로그램 인 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

제안 된 다른 진단 도구를 실행하면 다음 MaxClientsps 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 GbRAM이 있습니다. 그러므로:

httpd설정 을 조정하는 가장 좋은 방법 또는 정확히 원인을 진단하는 방법 에 대한 추가 정보 / 제안 사항은 무엇입니까?



답변

그것을 ‘해결’하기 위해 내가 한 일이 있습니다.

  1. 세트 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>
  1. 를 제외한 모든 아파치 모듈을 사용하지 않도록 설정 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클라이언트가 전혀 사용하지 않으므로 패키지를 제거하십시오 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을 사용 하여 두 프로세스간에 더 균등 한 요청을 배포합니다.