运行“空”Undertow时,每秒HTTP请求的限制因素是什么?

我正在运行一个非常简单的Undertowconfiguration。 整个代码包括:

public class HelloWorldUndertow { public static void main(String[] args) { Undertow undertow = Undertow.builder() .addHttpListener(9090, "0.0.0.0") .setHandler(new HttpHandler() { @Override public void handleRequest(HttpServerExchange exchange) throws Exception { exchange.setResponseCode(200); exchange.getResponseSender().send("hello!"); } }).build(); undertow.start(); } } 

我尝试testing每秒可以处理多less个请求。 我正在使用apache的ab工具进行测量:

 ab -n 100000 -c 10 http://localhost:9090/test 

我设法得到的最大数字是大约10000 3 /秒:

 Concurrency Level: 10 Time taken for tests: 10.664 seconds Complete requests: 100000 Failed requests: 0 Total transferred: 10000000 bytes HTML transferred: 600000 bytes Requests per second: 9377.69 [#/sec] (mean) Time per request: 1.066 [ms] (mean) Time per request: 0.107 [ms] (mean, across all concurrent requests) Transfer rate: 915.79 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.2 0 1 Processing: 0 1 0.5 1 11 Waiting: 0 1 0.5 1 11 Total: 0 1 0.5 1 11 Percentage of the requests served within a certain time (ms) 50% 1 66% 1 75% 1 80% 1 90% 2 95% 2 98% 2 99% 2 100% 11 (longest request) 

我知道这是大的,但我curoius在这种情况下是一个限制因素。 这不是处理器(使用Java Mission Control进行采样时,应用程序运行在20%以下),而不是内存。 我在Windows上运行它 – 也许这是原因?

我不能告诉你如何让它在Windows下运行时表现更好,但如果你在Linux中运行它,你可以在这里进行Jetty推荐的调优: http : //www.eclipse.org/jetty/documentation/current/ high-load.html总结:

 sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216 sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216" sysctl -w net.ipv4.tcp_wmem="4096 16384 16777216" sysctl -w net.core.somaxconn=4096 sysctl -w net.core.netdev_max_backlog=16384 sysctl -w net.ipv4.tcp_max_syn_backlog=8192 sysctl -w net.ipv4.tcp_syncookies=1 sysctl -w net.ipv4.ip_local_port_range="1024 65535" sysctl -w net.ipv4.tcp_tw_recycle=1 sysctl -w net.ipv4.tcp_congestion_control=cubic 

在运行代码时包含-server JVM参数。

然后尝试: ab -n 100000 -c 100 http://localhost:9090/test

(使用100个连接发出100,000个请求)

当我在我的Windows7笔记本电脑(3岁)的VMWare播放器上运行的Linux虚拟机中尝试时,我每秒获得超过100,000个请求。