sql >> Base de Datos >  >> RDS >> Mysql

PUNTO MUERTO APARENTE Creación de subprocesos de emergencia para tareas pendientes no asignadas

De http://www.mchange.com/projects/c3p0/#other_ds_configuration

numero de subprocesos auxiliares y maxAdministrativeTaskTime ayuda para configurar el comportamiento de los grupos de subprocesos de DataSource. De forma predeterminada, cada fuente de datos tiene solo tres subprocesos auxiliares asociados. Si el rendimiento parece arrastrarse bajo una carga pesada, o si observa a través de JMX o la inspección directa de un PooledDataSource, que la cantidad de "tareas pendientes" suele ser mayor que cero, intente aumentar numHelperThreads. maxAdministrativeTaskTime puede ser útil para los usuarios que experimentan tareas que se cuelgan indefinidamente y mensajes de "BLOQUEO APARENTE". (Consulte el Apéndice A para obtener más información).

maxAdministrativeTaskTime Valor predeterminado:0 segundos antes de que el grupo de subprocesos de c3p0 intente interrumpir una tarea aparentemente colgada. Raramente útil. Muchas de las funciones de c3p0 no son realizadas por subprocesos de cliente, sino de forma asincrónica por un grupo de subprocesos internos. La asincronía de c3p0 mejora el rendimiento del cliente directamente y minimiza el tiempo que se mantienen los bloqueos críticos al garantizar que las operaciones lentas de jdbc se realicen en subprocesos que no mantienen bloqueos. Sin embargo, si algunas de estas tareas "se bloquean", es decir, no tienen éxito ni fallan con una excepción durante un período de tiempo prolongado, el grupo de subprocesos de c3p0 puede agotarse y las tareas administrativas se pueden respaldar. Si las tareas son simplemente lentas, la mejor manera de resolver el problema es aumentar la cantidad de hilos, a través de numHelperThreads . Pero si las tareas a veces se bloquean indefinidamente, puede usar este parámetro para forzar una llamada al método de interrupción () del subproceso de la tarea si una tarea excede un límite de tiempo establecido. [c3p0 finalmente se recuperará de las tareas colgadas de todos modos al señalar un "BLOQUEO APARENTE" (lo verá como una advertencia en los registros), reemplazando los subprocesos de la tarea del grupo de subprocesos e interrumpiendo () los subprocesos originales. Pero dejar que el grupo entre en PUNTO MUERTO APARENTE y luego recuperarse significa que, durante algunos períodos, el rendimiento de c3p0 se verá afectado. Entonces, si está viendo estos mensajes, aumentar numHelperThreads y configurar maxAdministrativeTaskTime podría ayudar . maxAdministrativeTaskTime debe ser lo suficientemente grande como para que cualquier intento razonable de adquirir una conexión de la base de datos, probar una conexión o destruir una conexión se espere que tenga éxito o falle dentro del tiempo establecido. Cero (el valor predeterminado) significa que las tareas nunca se interrumpen, que es la política mejor y más segura en la mayoría de las circunstancias. Si las tareas son simplemente lentas, asigne más subprocesos. Si las tareas se cuelgan para siempre, trate de averiguar por qué, y tal vez establecer maxAdministrativeTaskTime pueda ayudar mientras tanto.

The default is 3 for numHelperThreads , increase this to 8-10 

setting maxAdministrativeTaskTime will help