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
이나 이 문제의 원인을 정확히 진단하는 방법에 대한 추가 지침/조언이 있습니까?
답변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>
, , , , , , , , 를 제외한 모든 Apache 모듈을 비활성화합니다
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/downloads/httpd.conf-magento
답변2
옵션이 아쉽네요하위당 최대 요청 수정의된 수의 요청 후에 프로세스 재활용이 가능하므로 메모리 누수가 존재하지만 더 이상 표시되지 않으므로 귀하의 경우에 도움이 됩니다.
또한:최대 클라이언트 수 = 서버 제한 * 하위 스레드당 하위 스레드 수
귀하의 경우 동시 사용자가 7명(MaxClients=7)만 필요한 경우(다운타임을 최소화할 수 없는 경우를 대비해) 2개의 프로세스로 충분하므로 구성은 다음과 같습니다.
<IfModule prefork.c>
StartServers 2
MinSpareServers 2
MaxSpareServers 20
ServerLimit 2
MaxClients 8
ThreadsPerChild 4
MaxRequestsPerChild 4000
</IfModule>
나는 사용한다최대 고객 수 8, 두 프로세스 간에 요청을 보다 균등하게 분배하기 위한 것입니다.
답변3
인메모리 컴퓨팅
다른 답변에서는 이미 값을 설정하는 방법을 다루었습니다. 이렇게 하려면 시스템의 다양한 요소의 메모리 사용량을 계산해야 합니다.
저는 메모리 컴퓨팅 문제를 해결하려고 노력하고 있으며 이는 많은 사람들에게 도움이 될 수 있습니다.
ps
프로세스만 표시합니다.RSS
값으로 사용하려는 경우 좋은 도구입니다.RSS
(상주 세트 크기)이 전체 공유 메모리(공유 라이브러리)를 추가하고 모든 프로세스를 반복하여 보고된 메모리를 초과합니다.
htop
또는top
기본적으로 특정 엔터티에 대한 모든 프로세스뿐만 아니라 모든 스레드도 표시합니다.프로세스를 표시하려면 누르기만 하면 H스레드 표시와 스레드 표시 안 함 사이를 전환할 수 있습니다.
스엠
메모리 사용량을 계산하는 더 나은 도구를 사용하려면 다음을 사용할 수 있습니다.smem
apt install smem
pss
더욱 신뢰할 수 있는 가치를 제공할 것입니다 .
제공된 가치
- RSS(상주 세트 크기)
- 프로세스에 할당된 RAM 메모리에는 공유 메모리가 포함됩니다(중복). 한 번 할당되어 여러 프로세스에서 사용되는 공유 라이브러리 RSS는 메모리 사용량을 보고합니다.
- PSS(비례 세트 크기)
- 모든 프로세스에 공유 메모리를 백분율로 할당합니다.
- 동일한 공유 라이브러리를 사용하는 4개의 프로세스, 각 프로세스는 계산을 위해 공유 메모리의 25%를 사용합니다.
- RSS와 비교하여 RSS는 프로세스당 공유 메모리를 100% 계산합니다.
- USS (독특한 슈트 사이즈)
- USS와 PSS는 smem의 저자 Matt Mackall이 제안한 용어이자 개념입니다.
몇 가지 옵션
- k : 메모리(MB)
- t: 하단에 총 메모리 표시