Eu tenho um servidor rodando o Django no topo do Gunicorn and Nginx, e eu experimentei uma pequena quantidade de tempo de inatividade na noite passada. Depois de reiniciar o Nginx e o Gunicorn, o servidor voltou ao normal, mas não consigo descobrir o que causou a interrupção. Inspecionando o log delineado onde o problema aconteceu: em primeiro lugar, havia cerca de 100 linhas como esta:
2014/03/04 15:48:47 [emerg] 21790#0: *19536658 posix_memalign(16, 4096) failed (12: Cannot allocate memory), client: xx.xx.xx.xx, server: www.mysite.com, request: "GET /static/images/loading.gif HTTP/1.1", host: "www.mysite.com"
Então os erros reais vieram. Havia cerca de 300 deles:
2014/03/04 15:49:04 [error] 21790#0: *19532341 connect() failed (110: Connection timed out) while connecting to upstream, client: xx.xx.xx.xx, server: www.mysite.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "www.mysite.com"
... e cerca de 100 deles:
2014/03/04 15:51:32 [error] 21789#0: *19529583 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: xx.xx.xx.xx, server: www.mysite.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "www.mysite.com"
... junto com alguns deles espalhados pelo registro:
2014/03/04 15:51:22 [emerg] 21791#0: *19539287 malloc(1024) failed (12: Cannot allocate memory) while waiting for request, client: xx.xx.xx.xx, server: 0.0.0.0:80
Quanto aos logs de erro do Django, eu estava recebendo muitos erros com esta mensagem:
OperationalError: could not fork new process for connection: Cannot allocate memory
Isso parece com algum tipo de erro de falta de memória, mas no momento em que minha troca estava completamente vazia e eu não vi nada em qualquer um dos logs para sugerir que qualquer processo foi morto. Alguém pode lançar alguma luz sobre o que pode estar acontecendo aqui?