Från http://www.mchange.com/projects/c3p0/#other_ds_configuration
numHelperThreads och maxAdministrativeTaskTime hjälpa till att konfigurera beteendet för DataSource-trådpooler. Som standard har varje DataSource endast tre associerade hjälptrådar. Om prestandan verkar dra under tung belastning, eller om du observerar via JMX eller direkt inspektion av en PooledDataSource, att antalet "väntande uppgifter" vanligtvis är större än noll, försök att öka numHelperThreads. maxAdministrativeTaskTime kan vara användbart för användare som upplever uppgifter som hänger på obestämd tid och meddelanden "APPARENT DEADLOCK". (Se bilaga A för mer.)
maxAdministrativeTaskTime Standard:0 sekunder innan c3p0:s trådpool kommer att försöka avbryta en uppenbarligen hängd uppgift. Sällan användbart. Många av c3p0:s funktioner utförs inte av klienttrådar, utan asynkront av en intern trådpool. c3p0:s asynkroni förbättrar klientens prestanda direkt och minimerar den tid som kritiska lås hålls genom att säkerställa att långsamma jdbc-operationer utförs i trådar som inte håller i lås. Men om några av dessa uppgifter "hänger sig", det vill säga de varken lyckas eller misslyckas med ett undantag under en längre tid, kan c3p0:s trådpool bli uttömd och administrativa uppgifter säkerhetskopieras. Om uppgifterna helt enkelt är långsamma är det bästa sättet att lösa problemet att öka antalet trådar, via numHelperThreads . Men om uppgifter ibland hänger sig på obestämd tid, kan du använda den här parametern för att tvinga fram ett anrop till uppgiftstrådens interrupt()-metod om en uppgift överskrider en angiven tidsgräns. [c3p0 kommer så småningom att återhämta sig från hängda uppgifter ändå genom att signalera ett "SYNLIGT DÖDLOCK" (du kommer att se det som en varning i loggarna), ersätta trådpoolens uppgiftstrådar och avbryta() de ursprungliga trådarna. Men att låta poolen gå in i APPARENT DEADLOCK och sedan återhämta sig betyder att under vissa perioder kommer c3p0:s prestanda att försämras. Så om du ser dessa meddelanden kan öka numHelperThreads och ställa in maxAdministrativeTaskTime hjälpa . maxAdministrativeTaskTime bör vara tillräckligt stor för att alla rimliga försök att skaffa en anslutning från databasen, att testa en anslutning, eller två förstöra en anslutning, skulle förväntas lyckas eller misslyckas inom den angivna tiden. Noll (standard) betyder att uppgifter aldrig avbryts, vilket är den bästa och säkraste policyn under de flesta omständigheter. Om uppgifterna bara är långsamma, allokera fler trådar. Om uppgifter hänger för evigt, försök ta reda på varför, och kanske kan ställa in maxAdministrativeTaskTime hjälpa till under tiden.
The default is 3 for numHelperThreads , increase this to 8-10
setting maxAdministrativeTaskTime will help