我正在使用RestTemplate
來執行併發HTTP請求。一段時間後,我開始變得Rest模板 - 沒有可用的緩衝區空間(達到最大連接數?)
java.net.SocketException異常:沒有可用的緩衝空間(最大 連接達到?)
- 我知道,這是關係到TIME_WAIT狀態插槽。
- 我已經嘗試安裝Windows 7修復程序,大多數消息來源鼓勵。
我配置
RestTemplate
使用HttpClient
如下:val httpClient = HttpClientBuilder.create() .setMaxConnPerRoute(properties.concurrencyLimit) .setMaxConnTotal(properties.concurrencyLimit) .build() return RestTemplate(HttpComponentsClientHttpRequestFactory(httpClient))
我曾嘗試使用其他十億配置
HttpClient
- 我試圖20-100
就在我要去按發佈您的問題按鈕,我的同事發現了一個解決方案,這沒有任何意義,我:
val httpClient = HttpClientBuilder.create()
.setMaxConnPerRoute(properties.concurrencyLimit * 2)
.setMaxConnTotal(properties.concurrencyLimit * 2)
.build()
return RestTemplate(HttpComponentsClientHttpRequestFactory(httpClient))
基本上,當我設置連接池的兩倍大線程數,整個事情就像一個魅力。
爲什麼?爲什麼不是第一次配置工作和第二次?
所有依賴項都由Spring Boot 1.4.0.RELEASE父pom管理。
如果使用異步連接器或異步然後servlet,而你是讓你休息調用線程可以服務於其他請求,當NEX請求到達,並試圖獲取連接,使HTTP調用就沒有連接左 –
意思這是一項批量工作。它所做的只是:它擊中兩個端點併合並結果,最後打印報告。 – grzegorztj
在你的批處理中,你會一個接一個地執行http請求嗎?然後在http 1.1中,如果當前http(under under tcp)連接忙於執行http請求,則其他請求將採用新連接,直到http 2.0纔會有多路複用。因此,您的批處理將使用多個http連接,並且可以更快地耗盡您的線程處理批次。 –