httpd 메모리 사용량


13

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설정 을 조정하는 가장 좋은 방법 또는 정확히 원인을 진단하는 방법 에 대한 추가 정보 / 제안 사항은 무엇입니까?


프로세스별로 메모리 사용량을 확인하려면 해당 -/+ buffers/cache라인 을 살펴 봐야 합니다. 그러나이 경우 변경은 비슷합니다. 아파치를 어떻게 조정했는지에 따라 요청을 처리 할 준비가 된 몇 가지 프로세스로 시작할 수 있습니다. 많은 동시 요청 기간이 지나면로드를 처리하기 위해 더 많은 프로세스가 분기 될 수 있습니다. 유휴 프로세스 수를 조정할 수도 있습니다. 따라서 아파치가 너무 많은 메모리를 사용하도록 성장하면 약간의 조정이 필요합니다.
wurtel

나는 아파치 서버 설정에 문제가 없지만, 과거 아파치에 대한 성능 조정 측면에서 많은 것을하지 않았다. 어떤 지시문을 보거나 안내해야하는지에 대한 제안 사항이 있습니까? 아파치에게 특정 시간이 지나면 포크 프로세스를 종료하도록 할 수있는 구성 설정이 있습니까? (아파치가 어떤 이유로 기본적으로이 작업을 수행하지 않는 것 같습니다.)
제임스 Spittal

이것이 제가 아파치에서 멀어진 이유입니다. Nginx 나 Lighttpd를 사용해보십시오.

흥미 롭군 좋은 점을 들었을 nginx때 시도해 볼 때가되었지만 솔직히 몇 년 동안 Apache를 사용해 왔으며 큰 문제는 없었습니다. 마 젠토는 실제로 메모리를 씹습니다.
James Spittal

평균 메모리 사용량을 계산하는 스크립트에는 grep httpd-process 의 메모리 사용량이 적습니다 (적어도 저에게는). 이 문제를 해결하려면 다음과 같이 계산에서 해당 줄을 제외하는 것이 좋습니다.ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
MaPePeR

답변:


11

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

  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


위의 구성은 분명히 큰 도움이되었습니다.
제임스 스피 탈

1
며칠 후 '메모리 누수'문제 httpd가 완전히 사라진 것 같습니다.
James Spittal

2

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을 사용 하여 두 프로세스간에 더 균등 한 요청을 배포합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.