Mysql
 sql >> Database >  >> RDS >> Mysql

DEADLOCK APPARENTE Creazione di thread di emergenza per attività in sospeso non assegnate

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

numHelperThreads e maxAdministrativeTaskTime aiuta a configurare il comportamento dei pool di thread di DataSource. Per impostazione predefinita, ogni DataSource ha solo tre thread di supporto associati. Se le prestazioni sembrano trascinarsi sotto carico pesante, o se si osserva tramite JMX o l'ispezione diretta di un PooledDataSource, che il numero di "attività in sospeso" è in genere maggiore di zero, provare ad aumentare numHelperThreads. maxAdministrativeTaskTime può essere utile per gli utenti che sperimentano attività che si bloccano a tempo indeterminato e messaggi "APPARENT DEADLOCK". (Vedi Appendice A per ulteriori informazioni.)

maxAdministrativeTaskTime Predefinito:0 secondi prima che il pool di thread di c3p0 cercherà di interrompere un'attività apparentemente bloccata. Raramente utile. Molte delle funzioni di c3p0 non vengono eseguite dai thread client, ma in modo asincrono da un pool di thread interno. L'asincronia di c3p0 migliora direttamente le prestazioni del client e riduce al minimo il periodo di tempo in cui vengono mantenuti i blocchi critici assicurando che le operazioni jdbc lente vengano eseguite in thread non di blocco. Se, tuttavia, alcune di queste attività "si bloccano", ovvero non riescono né falliscono con un'eccezione per un periodo di tempo prolungato, il pool di thread di c3p0 può esaurirsi e il backup delle attività amministrative può essere eseguito. Se le attività sono semplicemente lente, il modo migliore per risolvere il problema è aumentare il numero di thread, tramite numHelperThreads . Ma se le attività a volte si bloccano indefinitamente, è possibile utilizzare questo parametro per forzare una chiamata al metodo interrupt() del thread dell'attività se un'attività supera un limite di tempo impostato. [c3p0 alla fine si riprenderà comunque dalle attività sospese segnalando un "APPARENT DEADLOCK" (lo vedrai come un avviso nei registri), sostituendo i thread delle attività del pool di thread e interrompendo () i thread originali. Ma lasciare che il pool entri in APPARENT DEADLOCK e poi si riprenda significa che per alcuni periodi le prestazioni di c3p0 saranno compromesse. Quindi, se visualizzi questi messaggi, aumentare numHelperThreads e impostare maxAdministrativeTaskTime potrebbe essere d'aiuto . maxAdministrativeTaskTime dovrebbe essere sufficientemente grande da consentire che qualsiasi tentativo ragionevole di acquisire una connessione dal database, di testare una connessione o due distruggono una connessione, dovrebbe avere esito positivo o negativo entro il tempo impostato. Zero (l'impostazione predefinita) significa che le attività non vengono mai interrotte, che è la politica migliore e più sicura nella maggior parte dei casi. Se le attività sono lente, alloca più thread. Se le attività sono sospese per sempre, prova a capire perché, e forse l'impostazione di maxAdministrativeTaskTime può essere d'aiuto nel frattempo.

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

setting maxAdministrativeTaskTime will help