HttpClient報錯Timeout waiting for connection from pool


報錯現象

線上項目使用HttpClient請求第三方的HTTP資源,並發量高的時候,日志框報Timeout waiting for connection from pool

客戶端的現象是有時正常,有時報錯

 

原因分析

網上查找資料,很多照搬某個博客的解決方法,大致是合理的使用EntityUtils.consume及時釋放請求連接

這個說法沒錯,但是這里的問題不是請求連接釋放不當導致的

出現這個異常是因為新的請求來的時候,需要到HttpClient的線程池里面獲取一個連接,作為請求連接

當請求等待獲取連接的時間超過設置的connectionRequestTimeout,就會拋出Timeout waiting for connection from pool異常

 

解決方法

1. 合理的配置HttpClient的連接池大小

 

clientBuilder.setMaxConnTotal(maxConnections);

2. 結合業務現狀配置連接超時時間

RequestConfig.custom().
setConnectTimeout(connectTimeout).
setSocketTimeout(readTimeout).
.setConnectionRequestTimeout(connectionRequestTimeout).build();

 


免責聲明!

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



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