C3p0 APPARENTE IMPASSE exception
Je reçois cette exception dans mes logs du serveur Tomcat:
com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
WARNING: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@76b28200 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
WARNING: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@76b28200 -- APPARENT DEADLOCK!!! Complete Status:
Managed Threads: 3
Active Threads: 3
Active Tasks:
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1201fd18 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@408f3be4 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@7ba516d8 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)
Pending Tasks:
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@137efe53
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@766b0524
Pool thread stack traces:
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,main]
java.lang.Thread.sleep(Native Method)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,main]
java.lang.Thread.sleep(Native Method)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,main]
java.lang.Thread.sleep(Native Method)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
Je suis de l'utilisation d'Hibernate 3.6.2 et C3P0 0.9.1.2 avec MySQL. Après quelques heures de recherche sur Google, cette APPARENTE IMPASSE exception semble être généralement associée à déclaration de mise en cache. C'est mon C3P0 de configuration dans mon hibernate.cfg.xml:
<propertyname="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.acquire_increment">5</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">60</property>
<property name="hibernate.c3p0.idle_test_period">120</property>
<property name="hibernate.c3p0.timeout">180</property>
<property name="hibernate.c3p0.max_statements">0</property>
Je ne suis pas le faire toute déclaration de mise en cache que ce soit. Tous les indicateurs de ce qui est faux ici serait grandement apprécié.
OriginalL'auteur corderazo00 | 2013-08-07
Vous devez vous connecter pour publier un commentaire.
Les tâches qui sont dealocking sont Connexion tâches d'acquisition. C'est, c3p0 est d'essayer d'acquérir de nouvelles Connexions à partir de votre base de données, et celles de Connexion acquisition des tentatives de prendre beaucoup de temps.
La première chose que je voudrais faire est de mettre à niveau vers 0.9.2.1, qui a un bien meilleur moyen d'effectuer un tour de Connexion acquisitions dans les situations où l'acquisition des tentatives parfois échouer.
Si cela ne résout pas votre problème, alors vous aurez besoin de comprendre pourquoi c3p0 les tentatives de l'acquisition d'une Connexion sont suspendus pendant de longues périodes de temps: ni réussir ni à défaut avec une Exception.
Apparemment, ce n'est pas faire l'affaire, il ressort de BLOCAGE est de retour... Est-il un moyen de surveiller c3p0 activités plus proche ou à un niveau inférieur à voir exactement pourquoi il est suspendu lors de la tentative d'acquisition d'un lien?
Pourrait supprimer le cache du serveur web (tomcat/travail/Catalina) rien avoir à faire avec cela? J'ai trouvé quelques discussions dans lesquels les gens prétendent que cela à résoudre leurs problèmes.
tomcat est chaud redéployer est truffé de mines antipersonnel pour la permgen fuites de mémoire avec des bibliothèques comme c3p0 qui engendrent de nouveaux Threads. c3p0-0.9.5-pre4, dont la publication est imminente, peut-être même aujourd'hui, aura des nouveaux paramètres pour éviter ces fuites, de définir de nouveaux config privilegeSpawnedThreads de vrai et contextClassLoaderSource à la bibliothèque. peut-être attendre un jour ou deux et lui donner un essai!
Je suis totalement d'accord avec Steve, tomcat, chaud redéployer est vraiment proche d'une "roulette russe"-comme option. Si vous avez eu de la chance avec les options proposées, s'il vous plaît, nous dire les résultats, je suis vraiment curieux de savoir.
OriginalL'auteur Steve Waldman
Dans mon cas particulier, le problème venait de la configuration du serveur où j'ai déployé mon application.
C'est seulement après l'impression de la trace de la pile de ma demande qu'il a été suspendu parce que le pilote oracle a été en attente pour une sécurité de nombre aléatoire généré:
Ensuite, j'ai dû apprendre et de comprendre un peu plus sur l'entropie de bruit et pourrait réaliser, avec un peu d'aide de mes Unix amis, que l'un des serveurs a pas installé un paquet qui génère le "bruit".
Comme mentionné dans le post suivant, j'ai exécuté les commandes à venir:
cat /proc/sys/kernel/random/entropy_avail
23
cat /proc/sys/kernel/random/poolsize
4096
Donc là où trop peu d'entropie disponible pour générer une sécurité de nombre aléatoire.
Après l'installation du paquet
cat /proc/sys/kernel/random/entropy_avail
4096
Par la suite, je n'avais plus apparente blocages, mon application puisse obtenir des connexions à la bd.
http://www.usn-it.de/index.php/2009/02/20/oracle-11g-jdbc-driver-hangs-blocked-by-devrandom-entropy-pool-empty/
OriginalL'auteur Gus Vargas
Eu une erreur similaire comme ça avant.
Il pourrait aussi être causée par le serveur de base de données le blocage de votre adresse IP. Assurez-vous que votre serveurs IP ne sont pas bloqués par le serveur de base de données/fournisseur de cloud.
Dans mon cas, a été d'essayer d'insérer des données dans la base de données dans le cloud avec le multithreading, et il ne fonctionne que sur le local, mais pas sur un serveur (sur un autre réseau).
OriginalL'auteur simple