El problema se resolvió después de que comenzamos a restablecer las conexiones a la base de datos. Estábamos usando sequel
en el proyecto, y Passenger maneja el problema solo cuando se usa ActiveRecord.
Para ampliarlo, de manera predeterminada, Passenger usa el desove inteligente para las aplicaciones Ruby. Primero genera un proceso de precarga, que carga el marco y todas las bibliotecas. Después de que el proceso de precarga genera procesos de trabajo cuando surge la necesidad, que manejan las solicitudes. Al generar procesos de trabajo, todos los descriptores de archivo se heredan del proceso de precarga. Entonces, si no restablece la conexión a la base de datos, todos los procesos de trabajo comparten uno, establecido por el precargador. Lo que conduce a todo tipo de comportamientos extraños. Me gusta que las solicitudes tarden demasiado.
Antes de eso, también movimos el manejo de las conexiones WebSocket a un proceso separado. Sin embargo, no estoy seguro de si contribuyó al problema.
Más sobre eso aquí:
Desconectar si usa un servidor web bifurcado con precarga de código
Uso compartido no intencional de descriptores de archivos
Ejecutar el servidor de Action Cable en el mismo host y puerto, bajo un sub-URI