App 使用 HttpClient 發送請求,網路正常、後端服務正常,但一段時間內返回正確,另一段時間返回錯誤,表現不穩定。
PoolingHttpClientConnectionManager)是否配置足夠的最大連線數、每路由連線數,是否有洩漏(未釋放連線)。HttpClient 的連線保活與定期驗證機制。// 1. 設定合理超時
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(5000)
.setSocketTimeout(15000)
.setConnectionRequestTimeout(1000)
.build();
// 2. 使用連線池並啟用驗證
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200);
cm.setDefaultMaxPerRoute(50);
cm.setValidateAfterInactivity(2000); // 閒置 2 秒驗證連線有效性
CloseableHttpClient client = HttpClients.custom()
.setConnectionManager(cm)
.setDefaultRequestConfig(config)
.evictIdleConnections(30, TimeUnit.SECONDS) // 定期清理閒置連線
.build();
「一段時間正常一段時間錯誤」極大概率是**伺服端資源耗盡、GC 停頓、連線池洩漏或中間網路設備回收閒置連線**導致。單憑客戶端代碼難以定位,**必須雙端聯調、看日誌、抓封包**才能釐清真因。