PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

As solicitações ficam presas no PG::Connection#async_exec


O problema foi resolvido depois que começamos a restabelecer as conexões com o banco de dados. Estávamos usando sequel no projeto, e o Passenger trata do problema somente quando o ActiveRecord é usado.

Para expandi-lo, por padrão, o Passenger usa geração inteligente para aplicativos ruby. Ele primeiro gera o processo de pré-carregador, que carrega o framework e todas as bibliotecas. Depois que o processo de pré-carregador gera processos de trabalho quando surge a necessidade, que lidam com as solicitações. Ao gerar processos de trabalho, todos os descritores de arquivo são herdados do processo de pré-carregador. Portanto, se você não restabelecer a conexão com o banco de dados, todos os processos de trabalho compartilharão um, estabelecido pelo pré-carregador. O que leva a todo tipo de comportamento estranho. Como pedidos demorando muito.

Antes disso, também mudamos o manuseio de conexões WebSocket para um processo separado. Não tenho certeza se contribuiu para o problema no entanto.

Mais sobre isso aqui:

Desconectar se estiver usando o servidor Web de bifurcação com pré-carregamento de código
Compartilhamento não intencional de descritor de arquivo
Executando o servidor Action Cable no mesmo host e porta, sob um sub-URI