Connection-Pooling

用於 VM 部署的連接池庫的選擇

  • April 14, 2017

HickariCP 文件說:

HikariCP 在性能和可靠性方面都非常依賴準確的高解析度計時器。您的伺服器必須與時間源(例如 NTP 伺服器)同步。特別是如果您的伺服器在虛擬機中執行。不要依賴管理程序設置來“同步”虛擬機的時鐘。在虛擬機內部配置時間源同步。如果你在一個被證明是由於缺乏時間同步引起的問題上尋求支持,你將在 Twitter 上被公開嘲諷。

您會選擇哪些其他連接池庫,它們對虛擬機時間漂移不太敏感?

在時間可以向後或向前跳躍的環境中的任何池,它可以在虛擬機中,當它這樣做時將受到虛假故障的影響。

此外,受影響的不僅僅是連接池。

任何

  • 定時等待
  • 來自並發集合的定時輪詢
  • Object.wait() 超時
  • Thread.sleep() 呼叫
  • Java 中任何需要測量時間的東西都會受到影響。

如果您無法確定時鐘漂移,您將遇到無法解釋的應用程序故障,發生在您的程式碼和第三方庫中。

HikariCP(即)厭倦了花費數小時解決使用者問題、閱讀日誌和執行緒轉儲,卻發現他們的時鐘前後跳動超過一分鐘。

使用者:“為什麼我會收到一堆連接超時?!”

(幾天來來回回的問題和稍後檢查日誌……)

HikariCP:“嗯,你要求池嘗試 30 秒來給你一個連接……然後你的時鐘向前跳了 42 秒,Java(和作業系統)釋放所有執行緒,就好像時間真的過去了一樣。”

修復起來非常簡單,只需在 VM 中配置 NTP。

引用自:https://dba.stackexchange.com/questions/171002