我正在使用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连接,并且可以更快地耗尽您的线程处理批次。 –