如何合理設置連接池的大小


先看幾個問題,再看具體內容:

  1. 為什么要合理設置連接池的大小
  2. 服務器端的連接配置。最大允許多少連接?是否主動斷開連接?。Redis和mc配置基本一致。
  3. 客戶端連接池應該如何設置?
  4. JedisPool設置參數推薦。

 

  • DB端連接數過大的問題,目前很普遍存在。
  1. 在服務器端我們經常可以看到db上存在大量的tcp連接,而通過ss或者netstat命令查看,發現大量的連接處於established狀態。
  2. 進一步通過redis的client list命令發現,很多連接的idle時間都很大,這意味着很多連接長時間沒有活動和傳出數據。
  3. 服務器端維持很大的連接數,一方面需要消耗很多的進程資源,對於單進程的redis或者twemproxy,需要占用進程的調度時間;
  4. 另外,過多的空閑連接數對於db的容量評估也帶來錯誤性的判斷。

 

  •  redis/twemproxy和mc的connection timeout
  1. 目前在服務器端都沒有設置任何連接超時的參數,不用擔心服務器端主動斷開連接。
  2. 因而需要客戶端程序主動的釋放不再使用的連接和連接池中長時間空閑的連接。

 

  • redis/mc最大連接數
  1. redis配置中最大允許1w個連接。
  2. mc配置中最大允許接受65535個連接。
  3. 當應用程序中的並發連接數超過redis/mc服務器端的允許的連接數時,對redis/mc進行擴容為最佳方案,保證db能夠提供高性能服務。

 

  • 客戶端連接池的配置要點。

  1)  連接池的大小。單個應用程序中,接口的並發的連接數的1.5倍足夠滿足需求。

  2)  保持一定的空閑連接數,這樣可以保證客戶端可快速的獲取連接對象。

  3)  合理設置空閑接的回收時間。避免客戶端維持大量的空閑連接。

  4)  定時檢查長連接對象的有效性。主要是防止網絡抖動或者db端出現異常時主動關閉連接。

 

  • JedisPool Config推薦的設置。
jedipool連接池配置推薦的設置(適合v2.5+版本,咨詢了用戶團隊的開發人員):
// 設置最大連接數,(根據並發請求合理設置)。
config.setMaxTotal(100);
// 設置最大空閑連接數,(根據並發請求合理設置)
config.setMaxIdle(20);
// 多長空閑時間之后回收空閑連接
setMinEvictableIdleTimeMillis(60000);
// 設置最小空閑連接數或者說初始化連接數
config.setMinIdle(10);
// 設置最大等待時間
config.setMaxWaitMillis(500);
// 跟驗證有關
config.setTestOnBorrow(true);
// 跟驗證有關
config.setTestOnReturn(false);
// 啟動空閑連接的測試
config.setTestWhileIdle(false);

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM