powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Продолжение проблем - oracle, dbcp2, зависания...
14 сообщений из 14, страница 1 из 1
Продолжение проблем - oracle, dbcp2, зависания...
    #38943356
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Итак, есть soap-сервис, который тупо выполняет оракловые запросы.
Иногда (вот сейчас) он не может ничего выполнить.
Треддамп состоит в основном из
Код: sql
1.
2.
3.
4.
5.
6.
7.
    sun.misc.Unsafe.park(Native Method)
    java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    org.apache.commons.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:524)
    org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:438)
    org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361)
    org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:119)



И ни одного открытого коннекта. Вообще ни одного!

Перезапуск приложения не помогает- опять копятся такие же потоки.

Гугление выдаёт похожие вопросы ( тут , тут ), но без ответов.

telnet с хоста приложения на хост/порт сервера БД проходит.

Сетевой админ пишет, что "Сервис устанавливает подключение с сервером, секунду простаивает, потом завершает подключение".

Что за бред? Куда копать?

Linux: Red Hat Enterprise Linux Server release 6.4 (Santiago)
JDK: 1.8.0_11 64bit
dbcp2: 2.0.1
jdbc: 11.2.0.3.0

БД:
oracle: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

--
Алексей.
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38943362
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В DBCP заканчивается лимит соединений. Либо потолок слишком низкий установлен. Либо соединения утекают (не закрываются) и поэтому быстро заканчиваются.
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38943368
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, если посмотреть полный дамп всех потоков, то по нему будет видно какое количество соединений на данный момент действительно используется в рабочем коде. Сравнив его с лимитом пула, можно узнать есть утечка или нет.
Не помню на счет именно DBCP, но должна быть где-то настройка чтобы он насильно забирал неактивные соединения по таймауту.
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38943410
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСобственно, если посмотреть полный дамп всех потоков, то по нему будет видно какое количество соединений на данный момент действительно используется в рабочем коде. Сравнив его с лимитом пула, можно узнать есть утечка или нет.
Не помню на счет именно DBCP, но должна быть где-то настройка чтобы он насильно забирал неактивные соединения по таймауту.

Вообще это очень странно. Т.е. приложение проработало 10 дней, а потом не может проработать и 10 минут в течении 4-5 часов. Потом снова неделю-другую работает. Бред, полный бред.
Нагрузка не столь велика- я собрал из логов и запустил- на локальном компе всё отработало.
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38943439
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВ DBCP заканчивается лимит соединений. Либо потолок слишком низкий установлен. Либо соединения утекают (не закрываются) и поэтому быстро заканчиваются.

Они когда-то же должны закрываться...
Но да, маловато было- поставил максимум 128.

Ну и добавил логирование с подсчётом открытых/закрытых соединений поверх PoolingDataSource и его PoolGuardConnectionWrapper. Буду смотреть ещё...
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38943477
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

Настройте отдельное логирование самого пула и проанализируйте его в проблемные моменты.
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38943479
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominОни когда-то же должны закрываться...

Нет, даже если сервер убил соединение, но в Java оно не закрыто, пул его все равно может считать как используемое, если только у него нет настроек возвращать его насильно.
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38943496
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAlexey TominОни когда-то же должны закрываться...

Нет, даже если сервер убил соединение, но в Java оно не закрыто, пул его все равно может считать как используемое, если только у него нет настроек возвращать его насильно.

У меня всегда try-with-resource, так что должны (обязаны!) закрываться.

BlazkowiczНастройте отдельное логирование самого пула и проанализируйте его в проблемные моменты.

Я так и сделал- перекрыл расширил PoolingDataSource с учётом и логированием в getConnetcion и close
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38943499
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominУ меня всегда try-with-resource, так что должны (обязаны!) закрываться.
Statement и ResultSet тоже?
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38943529
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAlexey TominУ меня всегда try-with-resource, так что должны (обязаны!) закрываться.
Statement и ResultSet тоже?

Statement ни используется вообще, а вот PreparedStatement - да, все.

Вот ResultSet почти нигде, но они ж закрываются при закрытии Statement?
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38943534
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominStatement ни используется вообще, а вот PreparedStatement - да, все.
JFYI:
Код: java
1.
public interface PreparedStatement extends Statement


Alexey TominВот ResultSet почти нигде, но они ж закрываются при закрытии Statement?
На драйвер надейся, а сам не плошай.
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38944268
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

была очень похожая проблема. вроде связана была с какими-то тонкими настройками в оракле
т.е. проявлялась не на всех серверах БД

симптом- забивался весь пул коннектов к БД при этом оракл считал, что коннектов нет
добавляли такие параметры инициализации датасорса:

Код: java
1.
2.
3.
4.
5.
if(dataSource instanceof org.apache.commons.dbcp.BasicDataSource){
	org.apache.commons.dbcp.BasicDataSource bds=(org.apache.commons.dbcp.BasicDataSource)dataSource;
	bds.addConnectionProperty("oracle.jdbc.ReadTimeout",""+(SQLTIMEOUT*1000));
	bds.addConnectionProperty("oracle.jdbc.TcpNoDelay",(String)"true");
}
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38944620
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry.была очень похожая проблема. вроде связана была с какими-то тонкими настройками в оракле
т.е. проявлялась не на всех серверах БД

симптом- забивался весь пул коннектов к БД при этом оракл считал, что коннектов нет
добавляли такие параметры инициализации датасорса:

Код: java
1.
2.
3.
4.
5.
if(dataSource instanceof org.apache.commons.dbcp.BasicDataSource){
	org.apache.commons.dbcp.BasicDataSource bds=(org.apache.commons.dbcp.BasicDataSource)dataSource;
	bds.addConnectionProperty("oracle.jdbc.ReadTimeout",""+(SQLTIMEOUT*1000));
	bds.addConnectionProperty("oracle.jdbc.TcpNoDelay",(String)"true");
}



Спасибо, попробую. Правда проблема возникает раз в 10 дней где-то, так что сложно будет понять, что и как :(
...
Рейтинг: 0 / 0
Продолжение проблем - oracle, dbcp2, зависания...
    #38944635
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у dbcp свойство то ли maxidle толи просто idle выставить надо, не помню уже,
если плохо закрываешь соединения, например resultset не клозишь,
то рано или поздно соеденения кончаются и приехал,
так у меня с mysql одно время было,
до сих пор только догадываюсь, что было,
этот idle или как его там, настроил и все конекты закрывать аккуратно начал,
все прошло
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Продолжение проблем - oracle, dbcp2, зависания...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]