La conexión a MySQL puede verse interrumpida por varios medios, pero recomendaría revisar la respuesta de Mario Carrion, ya que es una respuesta muy sabia.
Parece probable que la conexión se interrumpa porque se comparte con otros procesos, lo que provoca errores en el protocolo de comunicación...
...esto podría suceder fácilmente si el conjunto de conexiones está vinculado al proceso, lo cual creo que es así, en ActiveRecord, lo que significa que la misma conexión podría "desprotegerse" varias veces simultáneamente en diferentes procesos.
La solución es que las conexiones de la base de datos deben establecerse solo DESPUÉS de la fork
declaración en el servidor de aplicaciones.
No estoy seguro de qué servidor estás usando, pero si estás usando un warmup
característica - no.
Si está ejecutando llamadas a la base de datos antes de la primera solicitud de red, no lo haga.
Cualquiera de estas acciones podría potencialmente inicializar el grupo de conexiones antes de fork
Se produce un bloqueo, lo que hace que el conjunto de conexiones de MySQL se comparta entre procesos, mientras que el sistema de bloqueo no lo hace.
No digo que esta sea la única razón posible del problema, como dijo @sloth-jr, hay otras opciones... pero la mayoría parece menos probable según su descripción.
Nota al margen:
Cada proceso podría contener una cantidad de conexiones. En tu caso, podrías tener hasta 500X36 conexiones . (ver edición)
En general, la cantidad de conexiones en el grupo a menudo puede ser la misma que la cantidad de subprocesos en cada proceso (no debe ser menor que la cantidad de subprocesos, o la contención lo ralentizará). A veces es bueno agregar algunos más dependiendo de su aplicación.
EDITAR:
Pido disculpas por ignorar el hecho de que el recuento de procesos hacía referencia a los datos de MySQL y no a los datos de la aplicación.
El recuento de procesos que mostró son los datos del servidor MySQL, que parece usar un hilo por esquema de E/S de conexión . Los datos de "Proceso" en realidad cuentan las conexiones activas y no procesos o subprocesos reales (aunque también debería traducirse en la cantidad de subprocesos).
Esto significa que de las 500 conexiones posibles por proceso de aplicación (es decir, si está utilizando 8 procesos para su aplicación, serían 8X500 =4000 conexiones permitidas), su aplicación solo abrió 36 conexiones hasta el momento.