[英]Releasing JDBC connections after kubernetes pod is killed
我正在Kubernetes中運行幾個spring boot應用程序。 每個應用程序都使用spring JPA連接到Postgresql 10.6數據庫。 我注意到的是,當Pod被意外殺死時,與數據庫的連接未釋放。
SELECT sum(numbackends) FROM pg_stat_database;
運行SELECT sum(numbackends) FROM pg_stat_database;
數據庫上的返回值可以說是50,在殺死了幾個運行spring應用程序的pod並重新運行查詢后,該數量躍升到60,這最終導致與postgresql的連接數超過了最大值,並阻止了重啟的pod的應用程序連接到數據庫。
我已經嘗試將postgresql選項idle_in_transaction_session_timeout
設置為15s,但這不會刪除舊的連接,並且連接數一直在增加。
我正在為我的spring應用程序使用com.zaxxer.hikari.HikariDataSource
數據源,並且想知道是否有一種方法可以防止這種情況的發生,無論是在posgresql還是spring boot方面。
歡迎任何意見或建議。
春季啟動版本:2.0.3.RELEASE
Java版本:1.8
PostgreSQL版本10.6
這個問題不僅可能出現在kubernetes pod上,還可能出現在服務器上運行的簡單應用程序上,該應用程序被強制kill -9 pid
(例如Linux上的kill -9 pid
),並且沒有機會通過關閉掛鈎進行清理以進行春季啟動。 我認為在這種情況下,應用程序方面沒有任何幫助。 如前所述,您可以通過但在數據庫方面的一些方法盡量不活動連接清理這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.