我有一个应用程序,我想每秒发送至少100k http请求,消息大小为2kb。但我似乎发送速度不会超过每秒10k。
我已经预先构建了所有要提出的要求,以确保在构建阶段不会限制自己。这是发送部分的样子-
CloseableHttpAsyncClient client = HttpAsyncClients
.custom()
.setMaxConnTotal(1000)
.setMaxConnPerRoute(1000)
.build();
client.start();
ArrayList<Future<HttpResponse>> futures = new ArrayList<>();
ArrayList<HttpPost> requests = new ArrayList<>();
/* ... I build 100k requests ... */
for(HttpPost request : requests) {
futures.add(client.execute(request, null));
}
/* ... record start time ... */
for(Future future : futures) {
future.get();
}
/* ... print change since start time ... */
我已经调整了MaxConnTotal,在1000之后它似乎没有更快的速度。我还测试了不同服务器的大小,核心范围从4到72,网络速度从5gbps到10gbps。即使在这72个核心10gbps机器上,MaxConnTotal超过1000,似乎也无济于事。
看起来机器的大小并不重要。不论大小,发送10万个请求通常大约需要10秒钟。
我还尝试将ulimit设置得更高一些,并将nofiles
中的/etc/security/limits.conf
的*和root都设置为无限制(当然,之后也会重新启动)。
我想念什么?为什么使用NIO http客户端无法在所有这些硬件上实现每秒10万个请求?