uso de memória do httpd

12

Tendo alguns problemas com o uso de memória httpd ( Apache/2.2.29 ).

Com o passar do tempo, o uso de memória nos processos httpd aumenta até chegar a 100%.

A última vez que reiniciei httpd foi há cerca de 24 horas. 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 executei 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

Assim, reiniciar o Apache leva a memória livre de 239 Mb para 894 Mb - o que parece ser um salto grande .

Eu tenho passado pela lista de módulos Apache atualmente habilitados (há bastante) e desabilitado / removido mod_wsgi e mod_perl (nenhum dos quais são necessários para este servidor, que está executando um baseado em PHP aplicação web - Magento, especificamente).

Com base no link , executei ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}' e obtive o 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 MaxClients , que é 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 (Amazon AWS m1.small instance) tem 1.7 Gb de RAM. Então, portanto:

Quaisquer outras sugestões / sugestões sobre a melhor forma de ajustar as configurações de httpd ou como diagnosticar o que exatamente pode estar causando isso?

    
por James Spittal 27.02.2015 / 03:02

2 respostas

11

Veja o que eu fiz para "resolvê-lo":

  1. Defina MaxClients 7 (com base em (1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748 )

Portanto:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients         7
MaxRequestsPerChild  4000
</IfModule>
  1. Desative 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

  2. Remova o pacote mod_ssl , pois o cliente não está usando https:// .

Vou relatar uma vez que esta nova configuração está sendo executada há algum tempo para ver se isso resolve o problema.

Alguma inspiração aqui foi emprestada de: link e link

    
por 28.02.2015 / 01:36
2

Receio que a opção MaxRequestsPerChild ajudou no seu caso, pois permite a reciclagem do processo após o número definido de solicitações, portanto, o vazamento de memória está presente, mas não é mais visível.

Além disso: MaxClients = ServerLimit * ThreadsPerChild

No seu caso, se você precisa apenas de 7 usuários simultâneos (MaxClients = 7), é o suficiente com 2 processos (caso você não consiga minimizar o tempo de inatividade), então a configuração pode ser:

<IfModule prefork.c>
StartServers       2
MinSpareServers    2
MaxSpareServers   20
ServerLimit        2
MaxClients         8
ThreadsPerChild    4
MaxRequestsPerChild  4000
</IfModule>

Eu uso MaxClients 8 , apenas para fazer uma distribuição de solicitação mais igual entre dois processos.

    
por 07.09.2016 / 08:48