Estou executando um site de produção do Django no Ubuntu Linode com 4 GB de RAM. Os principais processos são Apache2, MongoDB, Memcache, PostgreSQL, Tomcat6 e Redis. Apache OOMs cerca de 10 vezes por dia. Eu ajustei valores no apache2.conf muitas vezes e não vi nenhum efeito. Não há correlação óbvia entre o número de solicitações e picos de memória ou o caminho de solicitações e picos de memória. Eu digo 'picos' porque normalmente o Apache consome muito pouca memória, então, de repente, em um segundo ele pula para 3.5GB e é morto pelo Kernel. Eu não fui capaz de disparar artificialmente os picos usando o JMeter (software de teste de carga), normalmente o consumo de memória sob carga é bastante baixo e estável.
Gráfico de 24 horas de uso de memória (do Linode Longview):
link
Parece também que o uso de memória também está subindo lentamente.
Do syslog:
kernel: apache2 invoked oom-killer:
...
kernel: 11705 total pagecache pages
kernel: 5472 pages in swap cache
kernel: Swap cache stats: add 76719087, delete 76713615, find 92563708/94246314
kernel: Free swap = 0kB
kernel: Total swap = 2097148kB
kernel: 1050623 pages RAM
kernel: 43278 pages reserved
kernel: 788996 pages shared
kernel: 999768 pages non-shared
...
kernel: [ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name
kernel: [ 3709] 1000 3709 3706586 889237 7117 464598 0 apache2
...
kernel: Killed process 3709 (apache2) total-vm:14826344kB
Apache2.conf atual:
Timeout 30
KeepAlive Off
<IfModule mpm_prefork_module>
StartServers 3
MinSpareServers 2
MaxSpareServers 5
MaxClients 10
MaxRequestsPerChild 1000
</IfModule>
Mudar para o Nginx não é uma opção. Na maioria das vezes, os OOMs não matam o sistema, mas a cada duas semanas o servidor requer um reinício. A: O que pode estar causando isso? B: Que passos eu ainda não fiz para diagnosticar a causa verdadeira?