2016-05-16 4 views
2

В последнее время я заметил, что мой пул соединений c3p0 продолжает расти в размере и достигает максимального предела, указанного мной время от времени. Первоначально я думал, что это может произойти из-за того, что код приложения не возвращает соединение обратно в пул. Это был не тот случай. Чтобы смоделировать проблему в среде разработки, я сделал простой тест:Размер пула подключений C3P0 растет необъяснимо

Я написал API, который делает только простой запрос к базе данных и возвращает результат. Ниже настройка c3p0 бассейна Я использую:

#Pool configuration 
c3p0.initialPoolSize=10 
c3p0.minPoolSize=10 
c3p0.maxPoolSize=100 
c3p0.acquireIncrement=1 
c3p0.maxIdleTime=1800 
c3p0.unreturnedConnectionTimeout=20 
c3p0.idleConnectionTestPeriod=600 
c3p0.testConnectionOnCheckout=true 

На hiting тест API с параллелизмом 10, я ожидаю, что размер пула никогда не растет за 10. Но это идет в 20-30 в разы. Что объясняет это?

Я знаю, что могу уменьшить размер бассейна, установив maxIdleTimeExcessConnections на меньшее значение. Что заставляет его расти в первую очередь?

Вот варианты, которые я использую:

c3p0: 0.9.1.2 
hibernate entitymanager: 4.2.1.Final 
spring-data-jpa: 1.3.4.RELEASE 
+0

он может или не может повлиять на вашу заботу (я не помню, если там были изменения, которые могут повлиять на это), но c3p0 -0.9.1.2 составляет почти 9 лет. текущая версия - 0.9.5.2. первое, что нужно попробовать, - это обновить. –

+0

спасибо @SteveWaldman ... попробовал модернизацию, но это не помогло ... arounf 380 соединений для 50 одновременных запросов .. 20 для 10 одновременных ... изменил maxPoolSize до 400 для 50 одновременных ..., чтобы увидеть верхнюю ограничьте его до .... для 50 одновременных, я должен, вероятно, увеличить numHelperThreads по умолчанию 3 ... но даже это не должно привести к увеличению размера пула. правильно? – azi

+0

Таким образом, c3p0 обычно увеличивает свой целевой размер, по крайней мере, на 'gainIncrement' выше своего текущего размера, когда он 1) он еще не достиг максимума; и 2) он встречает запрос, который он не может немедленно обслуживать. См. Https://github.com/swaldman/c3p0/blob/9f97c814aef31b2997d6ecfad1e3875c6136317b/src/java/com/mchange/v2/resourcepool/BasicResourcePool.java#L613-642, если вам интересно. Это означает, что небольшое количество 'numHelperThreads' может повлиять на это. –

ответ

0

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

Пожалуйста, смотрите пост дает различные методы поиска и устранения неисправностей:

Running out of DB connections!

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