Apache Django OOM no servidor com 4 GB de RAM

1

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?

    
por protonpopsicle 26.07.2013 / 04:34

1 resposta

1

Você tem aplicativos django em execução? É um desses.

Não sabendo exatamente como você o configurou Eu estou apostando que você o tenha configurado para que o tempo de execução do python / django esteja compartilhando espaço de memória com o Apache. O uso da memória está sendo confundido aqui.

    
por 26.07.2013 / 04:42