Tendo alguns problemas com o uso de memória httpd
( Apache/2.2.29
).
Com o tempo, o uso da memória nos httpd
processos aumenta até chegar a 100%.
A última vez que reiniciei httpd
foi cerca de 24 horas atrás. A saída de 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
Para provar que é definitivamente httpd
, reiniciei httpd
e corri free -m
novamente:
[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
Portanto, reiniciar o Apache leva a memória livre de 239 Mb para 894 Mb - o que parece um grande salto.
Venho examinando a lista de módulos Apache atualmente ativados (há bastante) e desativado / removido mod_wsgi
e mod_perl
(nenhum dos quais é necessário para este servidor, que está executando um aplicativo Web baseado em PHP - Magento, especificamente).
Com base em https://servercheck.in/blog/3-small-tweaks-make-apache-fly , executei ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
e obtive a seguinte saída:
[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
A execução da outra ferramenta de diagnóstico sugerida para a MaxClients
qual ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
retorna o seguinte:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB
Este servidor ( m1.small
instância do Amazon AWS ) possui 1.7 Gb
RAM. Então, portanto:
Mais sugestões / sugestões sobre a melhor forma de ajustar as httpd
configurações ou como diagnosticar o que exatamente pode estar causando isso?
fonte
-/+ buffers/cache
linha; no entanto, neste caso, a alteração é comparável. Dependendo de como o apache foi ajustado, ele pode começar com apenas alguns processos prontos para lidar com solicitações; após um período de muitas solicitações simultâneas, provavelmente haverá mais processos bifurcados para lidar com a carga. O número de processos inativos também pode ser ajustado. Portanto, se o apache crescer para usar muita memória, você precisará fazer alguns ajustes.nginx
então talvez seja a hora de tentarmos, mas honestamente, eu uso o Apache há anos e nunca tive grandes problemas. Magento realmente mastiga memória embora.grep httpd
(pelo menos para mim). Para corrigir isso, eu recomendaria excluir essa linha do cálculo da seguinte maneira:ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
Respostas:
Aqui está o que eu fiz para 'resolvê-lo':
MaxClients 7
(com base em(1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748
)Portanto:
Desativar todos os módulos do Apache, exceto
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
Remova o
mod_ssl
pacote, pois o cliente não está usando nenhumhttps://
.Vou relatar assim que essa nova configuração estiver em execução há algum tempo para ver se isso a resolve.
Alguma inspiração aqui foi emprestada de: http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/ e http://www.activoinc.com/ downloads / httpd.conf-magento
fonte
httpd
parecem ter desaparecido completamente.Receio que a opção MaxRequestsPerChild tenha ajudado no seu caso, pois permite a reciclagem do processo após um número definido de solicitações, para que haja vazamento de memória, mas não seja mais visível.
Além disso: MaxClients = ServerLimit * ThreadsPerChild
No seu caso, se você precisar de apenas 7 usuários simultâneos (MaxClients = 7), é o suficiente com 2 processos (apenas no caso de um falhar em minimizar o tempo de inatividade), portanto, a configuração pode ser:
Eu uso o MaxClients 8 , apenas para fazer uma distribuição de solicitação mais igual entre dois processos.
fonte