2016-01-26 3 views
0

Я использую спящий режим 4.3.6 с C3P0 0.9.2.1, и я очень часто получаю следующее сообщение об ошибке:как избавиться от ошибки c3p0 тупиковой

ThreadPoolAsynchronousRunner:778 - com[email protected]9abc33e -- Running DeadlockDetector[Exiting. No pending tasks.] 

Это замедляет работу сервера и у меня есть не знаю, что вызывает его, и как его получить.

Это мой hibernate.config файл:

<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://ip:port/app?autoReconnect=true&amp;useUnicode=true&amp;createDatabaseIfNotExist=true&amp;characterEncoding=utf-8</property> 
    <property name="hibernate.connection.username">username</property> 
    <property name="hibernate.connection.password">password</property> 
    <property name="hibernate.connection.isolation">2</property> 
    <property name="show_sql">true</property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="hibernate.hbm2ddl.auto">update</property> 
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
    <property name="hibernate.c3p0.min_size">5</property> 
     <property name="hibernate.c3p0.max_size">100</property> 
     <property name="hibernate.c3p0.timeout">300</property> 
     <property name="hibernate.c3p0.max_statements">50</property> 
     <property name="hibernate.c3p0.idle_test_period">3000</property> 
    <mapping class="server.c1"/>   
    <mapping class="server.c2"/> 
    <mapping class="server.c3"/> 
    <mapping class="server.c4"/> 
    <mapping class="server.c5"/> 
    </session-factory> 
</hibernate-configuration> 

Кроме того, я также c3p0.properties файл:

c3p0.testConnectionOnCheckout=true 
c3p0.privilegeSpawnedThreads=true 
c3p0.contextClassLoaderSource=library 

Есть много вопросов по этому поводу, но я не мог найти конкретное решение.

+0

Вы пытались изменить параметры «maxAdministrativeTaskTime» и «numHelperThreads», как указано в документе c3p0 по этой проблеме? Ссылка можно найти по адресу http://www.mchange.com/projects/c3p0/#maxAdministrativeTaskTime – Dukefirehawk

+0

Какие значения следует задать? –

+0

Начать с 'numHelperThreads = 10'. Если проблема остается, добавьте 'maxAdministrativeTaskTime = 3' (увеличение до значения, которое достаточно длинно для завершения самого длинного запроса). – Dukefirehawk

ответ

2

У меня была аналогичная проблема с c3p0. Мое окончательное решение было использовать данный пул соединений https://github.com/brettwooldridge/HikariCP

+0

Это не помогло решить мою проблему, конечно, помогло, спасибо. –

0

Если вы все еще используете C3P0, следующие шаги могут решить эту проблему:

  1. Обновление до последней C3P0 (теперь 0.9.5.2).
  2. Установите следующий параметр конфигурации:

    c3p0.statementCacheNumDeferredCloseThreads=1

ВИДЕТЬ docs.

Обновление: Ой, подождите. Я ответил слишком быстро. Сожалею!

Вы фактически не видите взаимоблокировки, вы просто видите сообщения, в которых работает детектор блокировки. Сообщение, которое вы видите, не является ошибкой вообще, просто уведомление, которое регистрируется в TRACE/DEBUG/FINEST (в зависимости от используемой библиотеки ведения журнала).

Необходимо настроить регистрацию, чтобы регистраторы с префиксом com.mchange регистрировались по адресу INFO. Вот и все.

Смежные вопросы