У меня есть сервер, на котором запущен Django поверх Gunicorn и Nginx, и прошлой ночью у меня был небольшой простой. После перезапуска Nginx и Gunicorn сервер вернулся в нормальное состояние, но я не могу понять, что вызвало сбой. Изучив журнал, мы выяснили, где возникла проблема: во-первых, было около 100 таких строк:
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"
Потом пришли собственно ошибки. Таких было около 300:
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"
... и около 100 из них:
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"
... наряду с некоторыми из них, попавшими в журнал:
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
Что касается журналов ошибок Django, я получал много ошибок с этим сообщением:
OperationalError: could not fork new process for connection: Cannot allocate memory
Это похоже на какую-то ошибку нехватки памяти, но в то время мой своп был полностью пуст, и я не видел ничего в журналах, чтобы предположить, что какой-либо процесс был убит. Может ли кто-нибудь пролить свет на то, что здесь может происходить?