sql >> Database >  >> RDS >> Mysql

SCHIJNLIJKE DEADLOCK Nood-threads maken voor niet-toegewezen lopende taken

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

numHelperThreads en maxAdministrativeTaskTime helpen bij het configureren van het gedrag van DataSource-threadpools. Standaard heeft elke DataSource slechts drie bijbehorende hulpthreads. Als de prestaties onder zware belasting lijken te slepen, of als u via JMX of directe inspectie van een PooledDataSource waarneemt, dat het aantal "lopende taken" meestal groter is dan nul, probeer dan het aantal numHelperThreads te verhogen. maxAdministrativeTaskTime kan handig zijn voor gebruikers die taken ervaren die voor onbepaalde tijd blijven hangen en "SCHIJNLIJKE DEADLOCK"-berichten. (Zie Bijlage A voor meer.)

maxAdministrativeTaskTime Standaard:0Seconden voordat de threadpool van c3p0 zal proberen een schijnbaar vastgelopen taak te onderbreken. Zelden nuttig. Veel van de functies van c3p0 worden niet uitgevoerd door clientthreads, maar asynchroon door een interne threadpool. De asynchronie van c3p0 verbetert rechtstreeks de prestaties van de client en minimaliseert de tijdsduur dat kritieke vergrendelingen worden vastgehouden door ervoor te zorgen dat langzame jdbc-bewerkingen worden uitgevoerd in threads die geen vergrendeling vasthouden. Als sommige van deze taken echter "vastlopen", dat wil zeggen dat ze niet slagen of mislukken met een Exception voor een langere periode, kan de threadpool van c3p0 uitgeput raken en administratieve taken worden geback-upt. Als de taken gewoon traag zijn, is de beste manier om het probleem op te lossen het verhogen van het aantal threads, via numHelperThreads . Maar als taken soms voor onbepaalde tijd blijven hangen, kunt u deze parameter gebruiken om een ​​aanroep van de methode interrupt() van de taakthread te forceren als een taak een ingestelde tijdslimiet overschrijdt. [c3p0 zal uiteindelijk toch herstellen van vastgelopen taken door een "SCHIJNLIJKE DEADLOCK" te signaleren (je zult het zien als een waarschuwing in de logs), de threadpool-taakthreads te vervangen en de originele threads te onderbreken()en. Maar als u de pool in SCHIJNLIJKE DEADLOCK laat gaan en vervolgens herstelt, betekent dit dat de prestaties van c3p0 gedurende bepaalde perioden zullen afnemen. Dus als u deze berichten ziet, het verhogen van het aantal HelperThreads en het instellen van maxAdministrativeTaskTime kan helpen . maxAdministrativeTaskTime moet groot genoeg zijn dat elke redelijke poging om een ​​verbinding uit de database te verkrijgen, een verbinding te testen of twee om een ​​verbinding te vernietigen, binnen de gestelde tijd zou slagen of mislukken. Nul (de standaard) betekent dat taken nooit worden onderbroken, wat onder de meeste omstandigheden het beste en veiligste beleid is. Als taken gewoon traag zijn, wijs dan meer threads toe. Als taken voor altijd blijven hangen, probeer dan uit te zoeken waarom, en misschien kan het instellen van maxAdministrativeTaskTime in de tussentijd helpen.

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

setting maxAdministrativeTaskTime will help 


  1. Android SQLite-databasetabel wordt niet gemaakt

  2. Hoe de database te controleren en, als resultaat, een keuzerondje aan te vinken?

  3. Maak een website met MySQL

  4. 6 manieren om dubbele rijen in Oracle te selecteren