Estou executando um site Django 1.8, servido por nginx e Gunicorn, com um back-end Postgres 9.4.
Quando faço muitas chamadas com uso intensivo de dados para a API do site sucessivamente, notei cerca de 1 em 100 consultas falhando e exibindo páginas nginx 404.
Minha primeira suposição foi que o banco de dados do Postgres estava rangendo com a carga, mas os logs do Postgres na verdade me mostram isso:
2015-08-06 14:33:43 UTC:127.0.0.1(42287):dbuser@dbname:[3737]: LOG: could not send data to client: Broken pipe
2015-08-06 14:33:43 UTC:127.0.0.1(42287):dbuser@dbname:[3737]: STATEMENT: SELECT ... (psql statement)
2015-08-06 14:33:43 UTC:127.0.0.1(42287):dbuser@dbname:[3737]: FATAL: connection to client lost
2015-08-06 14:33:43 UTC:127.0.0.1(42287):dbuser@dbname:[3737]: STATEMENT: SELECT ... (psql statement)
Acho que o que isso quer dizer é que o Postgres está realmente executando as consultas corretamente, mas não pode enviar dados para o cliente.
Então, acho que para depurar esse problema, devo olhar para Django/Gunicorn/nginx.
Eu entendi isso corretamente?
Sim, parece que você entendeu isso corretamente. O cliente enviou os dados para um back-end postgresql e, em seguida, desconectou-se abruptamente (ou foi eliminado). A mensagem é basicamente "Tenho uma resposta para você, mas não tenho para onde enviá-la!"
Eu definitivamente olharia para os logs dos outros serviços e compararia os carimbos de data/hora para tentar analisar mais profundamente o que está acontecendo.
Espero que ajude. =)