Tomcat 6 пул соединений выходит из строя при использовании CMS GC - PullRequest
2 голосов
/ 10 октября 2010

Недавно мы перешли на сборщик мусора CMS на нашем сервере (XX:+UseConcMarkSweepGC), который отлично работал в тестах.Когда мы пошли в производство, первые несколько часов все было в порядке, но затем мы внезапно начали видеть ужас:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection,
pool error Timeout waiting for idle object

Мы видели эти сообщения, когда база данных физически не работала или сильно загружена, нона этот раз это было не так.Поэтому я начал задаваться вопросом, может ли недавнее изменение ГК быть виновником.

Чего я не понимаю, так это почему мы не видели этого раньше.Изменится ли изменение GC на concurrent-mark-sweep что-то (возможно, финализаторы), что может вызвать проблемы с этой конфигурацией?

Мои context.xml параметры выглядят примерно так:

<Resource name="jdbc/DB" auth="Container" type="javax.sql.DataSource"
           maxActive="64" maxIdle="60" maxWait="10000"
            defaultAutoCommit="false"

Я прочитал эту ссылку и начал задаваться вопросом, были ли это невероятно наивные параметры.Насколько я понимаю, свыше 60 соединений мы начнем открывать и закрывать соединения, не возвращая их в пул.Но я до сих пор не понимаю, есть ли связь между этим и нашим изменением GC.

Мы используем Tomcat 6.0.29 с MySQL 5.1.45 (разъем JDBC 5.1.12).

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

используйте removeAbandoned="true" при инициализации пула соединений. Перейдите по этой ссылке http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

0 голосов
/ 23 марта 2011

60 подключений - это путь к многим.Какое приложение вы запускаете?

В любом случае я настоятельно рекомендую отойти от dbcp и использовать что-то вроде http://sourceforge.net/projects/c3p0/

...