我想了解Slick-Hikari是如何工作的,我讀過很多文檔,但我有一個用例,其行爲我不明白。光滑與Hikari不需要在需要時使用更多連接
我使用Slick 3與Hikari,使用默認配置。我已經有一個生產應用程序,同時有大約1000個用戶連接。我的應用程序使用websockets,當我部署新版本時,所有客戶端都重新連接。 (我知道這不是處理部署的最佳方式,但目前我沒有集羣)。當所有這些用戶重新連接時,他們都開始進行查詢以獲取其用戶狀態(狗樁效應)。當它發生油滑開始拋出了很多的錯誤,如:
java.util.concurrent.RejectedExecutionException: Task [email protected] rejected from [email protected][Running, pool size = 20, active threads = 20, queued tasks = 1000, completed tasks = 23740]
我認爲它的發生是待處理的查詢光滑隊列已滿,因爲它無法處理請求數據庫中的信息的所有客戶端。但是,如果我看到的指標,Dropwizard提供了我,我看到以下內容:
近16:45
我們知的部署。在舊的實例被終止之前,我們可以看到連接數量從20到40.我認爲這是正常的,因爲部署過程如何完成。
但是,如果Slick的查詢隊列由於狗樁效應而變滿,爲什麼它沒有使用超過3-5個連接(如果它有20個連接可用)?該數據庫表現非常好,所以我認爲這個瓶頸在Slick中。
對於改進此部署過程,您有任何建議嗎?我現在只有1000個用戶,但幾周後我會有更多。
也許附加表示在所有20所謂的「活躍」在ThreadPoolExecutor的線程都將有助於線程轉儲?他們是否被封鎖在HikariCP上?他們被其他東西阻擋了嗎?另外,Slick和HikariCP的版本(完全)是什麼? – brettw
這是否有助於http://stackoverflow.com/questions/29897003/slick-3-0-rc3-fails-with-java-util-concurrent-rejectedexecutionexception? – brettw
什麼版本的Slick和HikariCP?我知道Slick在過去的幾個月裏嘗試了一些改變來提高併發性...... – brettw