Obrigado a todos por suas respostas! Seguindo suas sugestões, consegui reduzir o uso da minha memória para 195M SWAP e 108M RSS, sem tocar no meu código (definitivamente vou otimizá-lo em breve, mas isso deveria ser uma solução para me tirar rapidamente de problemas).
Veja a lista de coisas que fiz:
Livri-me do curinga usado nas entradas do VirtualHost. Em vez de *: 80 e *: 443, usei o IP real do meu servidor.
Alterado o prefork MPM do Apache. Estes são os valores que acabei usando:
StartServers 1 MinSpareServers 1 MaxSpareServers 5 ServerLimit 16 MaxClients 16 MaxRequestsPerChild 0 ListenBacklog 100
Estes números não são mágicos. Eu passei algum tempo tentando valores e combinações diferentes e, em seguida, testando-os contra o uso real do meu servidor e todos deveriam fazer o mesmo em seu ambiente. Para o registro, meu servidor recebe perto de 2M pvs / mês, servindo tanto páginas dinâmicas e ativos em uma taxa regular - nenhum efeito digg. A intenção, novamente, era reduzir o consumo de memória, não melhorar o desempenho ou a HA.
Referência:
Desativado o KeepAlive do Apache. Ao definir KeepAliveTimeout
como um valor mais baixo (2 no meu caso) posso esperar menos processos do servidor aguardando conexões com clientes ociosos que podem não solicitar mais conteúdo .
Referência: link
Removemos o módulo não utilizado do MySQL. Eu adicionei skip-innodb
ao my.cnf do MySQL. Redução maciça do consumo de memória.
Há também algumas boas sugestões notáveis que não posso fazer pessoalmente:
- Remova os módulos do PHP que você não precisa. O PHP no meu servidor tem a maioria dos mods já compilados, eu provavelmente vou tentar o meu próprio PHP em outros VPS.
- Mude para o nginx com o php-fastcgi. Esse é outro bom conselho que tentarei em breve, mas agora não posso arriscar o tempo de inatividade.