2014-12-03 96 views
1

我正在运行一个非常简单的Undertow配置。整个代码包括:运行“空”Undertow时,每秒HTTP请求的限制因素是什么?

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(); 
    } 
} 

我试着测试它可以处理多少个请求。我使用的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任务控制采样时,应用程序运行时低于20%),而不是内存。我在Windows上运行它 - 也许这是原因?

回答

1

我不能告诉你如何在Windows中运行时,它表现得更好,但如果你在Linux下运行它,你可以做推荐码头调谐这里: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个请求)

当我尝试在Linux虚拟机在VMWare Player中运行我的Windows7的笔记本电脑(3岁),我得到超过10万每秒请求数。