Eu tenho uma configuração do django usando o Django 1.6.7 e o Postgres 9.3 no Ubuntu 14.04 LTS.
A qualquer momento, o site recebe aproximadamente 250 conexões simultâneas com o banco de dados PostgreSQL, que é um Quad Core Xeon E5-2670 a 2.5GHz, e tem 16GB de RAM. A carga média nessa máquina em particular ao longo do dia é de cerca de 20 a 30.
Ocasionalmente, recebo e-mails em sentry sobre conexões com tempo limite para o banco de dados, e acho que habilitar algum tipo de pool de conexões ajudará a atenuar esse problema, bem como diminuir um pouco a carga no banco de dados.
Como estamos usando o Django 1.6, temos o pool integrado disponível para nós. No entanto, quando eu definir CONN_MAX_AGE para 10 segundos ou 60 segundos, quase imediatamente o número de conexões simultâneas salta para a configuração máxima permitida (que é aproximadamente o dobro do que normalmente vemos) e as conexões começam a ser rejeitadas.
Então, parece que, por qualquer motivo, as conexões ARE persistem, mas elas NÃO estão sendo reutilizadas.
Qual poderia ser a causa disso?
PS. Nós também estamos usando gunicorn com --worker-class = eventlet. Talvez esta seja a fonte de nossos problemas?