Eu tenho um par de servidores que hospedam um único site de comércio eletrônico Magento com tráfego moderado (60 mil visualizações de página por dia relatadas no google analytics, penso em 80 mil relatadas no próprio servidor). O servidor de banco de dados funciona sem problemas e com rapidez, além de um raro soluço ocasional, mas o servidor apache vem caindo de vez em quando.
Eu configurei o magento para usar o cache recomendado do PHP (APC), além de manter seus próprios arquivos de cache em 1,5 gig tmpfs (esse tmpfs fica bastante cheio regularmente, e eu tenho um script em execução para limpar os arquivos em cache quando o tmpfs é mais de 80%). Eu sirvo a maioria das imagens da Amazon Cloudfront. Recentemente, configurei o nginx como um proxy reverso para o apache (o nginx também serve os arquivos estáticos). Eu configurei o apache da melhor maneira possível - os keepalives e hostnamelookups estão desativados e o prefork é configurado da seguinte maneira:
<IfModule prefork.c>
StartServers 50
MinSpareServers 50
MaxSpareServers 100
ServerLimit 512
MaxClients 256
MaxRequestsPerChild 400
</IfModule>
Não desliguei os arquivos .htaccess e o log de acesso está ativado. Eu sei que existem alguns módulos que posso desligar. Não sei ao certo qual efeito teria essas três alterações, se houver.
O servidor apache é um VPS com 6 GB de RAM. No momento da redação, o servidor está relatando load average: 17.77, 18.27, 49.76
, mas há cerca de 2 GB de RAM livre. Quando fica muito ruim, a carga vai para mais de 120 e fica lá - reiniciar o apache traz o site de volta e a carga de volta.
vmstat
é (enquanto o servidor está relatando a carga acima), eu acho, mostrando um valor ocioso da CPU flutuando entre 0 e 70 ou mais. iostat
está mostrando um valor de iowait entre 0 e 0,2%.
Estou um pouco preso. O pouco que sei está me dizendo que o problema é que a CPU está sobrecarregada como resultado da combinação do código que está sendo executado e do número de usuários. Mas não tenho experiência suficiente para ter certeza de que esse é o problema. Se esse for o problema, acho que as soluções são melhorar o código ou dividir o site que hospeda em dois VPS com um balanceador de carga.
Então, acho que minhas perguntas são:
- O que mais posso fazer para encontrar problemas ou gargalos no servidor?
- Existem alterações óbvias que posso fazer na configuração do servidor para melhorar isso?
- É uma boa ideia definir um sistema automatizado para reiniciar o apache quando a carga estiver acima de um determinado nível?
- Pelo exposto, qual a probabilidade de o site ter superado o servidor?
Editar:
Achei algo estranho - / var / spool / mail / root era grande ... 38 gig. Isso parece ... doentio. Esse poderia ser o problema?