Освобождение JDBC-соединений после того, как kubernetes pod убит - PullRequest
0 голосов
/ 02 марта 2019

Я использую пару весенних загрузочных приложений в Kubernetes.Каждое приложение использует Spring JPA для подключения к базе данных Postgresql 10.6.Что я заметил, так это то, что когда модули неожиданно уничтожаются, соединения с базой данных не освобождаются.

Запуск SELECT sum(numbackends) FROM pg_stat_database; в базе данных возвращает, скажем, 50, после убийства пары модулей при запуске приложения spring ипри повторном выполнении запроса это число увеличивается до 60, что в конечном итоге приводит к тому, что число подключений к postgresql превышает максимальное и предотвращает подключение перезапущенных приложений модуля к базе данных.

Я экспериментировал с параметром postgresql idle_in_transaction_session_timeout, установив его в15 секунд, но это не прерывает старые соединения, и число продолжает расти.

Я использую источник данных com.zaxxer.hikari.HikariDataSource для своих весенних приложений, и мне было интересно, есть ли способ предотвратить это, либона стороне posgresql или весенней загрузки.

Любые советы или предложения приветствуются.

Версия загрузочной пружины: 2.0.3.RELEASE
Версия Java: 1.8
Версия Postgresql 10.6

1 Ответ

0 голосов
/ 26 августа 2019

Эта проблема может возникать не только с модулями kubernetes, но также и с простым приложением, работающим на сервере, который принудительно уничтожается (например, kill -9 pid в Linux) и не имеет возможности обработать процесс очистки с помощью перехватчика отключения для весенней загрузки.,Я думаю, что в этом случае ничто на стороне приложения не может помочь.Однако вы можете попробовать очистить неактивные соединения несколькими способами на стороне базы данных, как указано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...