Virtualbox HTTP 负载测试,主机 CPU 过载问题

asc*_*ler 5 debian tomcat java virtualbox load-testing

我正在使用Virtualbox 4.1.8 虚拟化的 Debian Squeeze 6.0.4 x64 上运行的小型 Java EE 1.7.0 / Tomcat 7.0.26 应用程序进行 HTTP 负载测试基准测试(使用Apache BenchmarkSiege)。计算机主机是 Ubuntu 11.10 x64。

我在 Tomcat 中修改了这些参数server.xml

<Connector 
    port="8080" 
    protocol="HTTP/1.1"
    connectionTimeout="200000"
    redirectPort="8443" 
    acceptCount="2000"
    maxThreads="150"
    minSpareThreads="50" />
Run Code Online (Sandbox Code Playgroud)

在服务器上执行的应用程序大约需要 300 毫秒。

这个应用程序运行良好,直到达到一定数量的并发连接,例如:

ab -n 500 -c 150 http://xx.xx.xx.xx:8080/myapp/
ab -n 1000 -c 50 http://xx.xx.xx.xx:8080/myapp/
siege -b -c 100 -r 20 http://xx.xx.xx.xx:8080/myapp/ 
Run Code Online (Sandbox Code Playgroud)

socket connection timed out发生了很多事情,这使主机处理器完全过载(但 VM 内的 CPU 负载是正常的)。

htop在主机上执行一个操作,我可以看到 Virtualbox 进程在 300% CPU 下运行,并且即使在负载测试完成后不会停机。(我已经为 VM 分配了 4 个处理器,如果我只分配了一个处理器,CPU 负载会低于 100%)。

重新启动 Tomcat 什么也不做,我被迫重新启动整个 VM。

我尝试在 VM 本地启动这些 ab/siege 命令,一切顺利。

我首先认为这与此处解释的 linux 网络限制有关:使用 ab 运行一些基准测试,而 tomcat 开始真正变慢 所以我修改了这些 TCP 参数:

echo 15 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 30 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
Run Code Online (Sandbox Code Playgroud)

似乎是更好的,但它仍然超载主机CPU和输出socket connections time out在一定量的并发连接。

我想知道这是否与 Virtualbox 如何处理外部并发连接无关。

小智 0

您是在虚拟机内进行测试吗?还是从其他地方来的?如果是虚拟机,请尝试指向 127.0.0.1 进行测试。

ab -n 500 -c 150 http://127.0.0.1:8080/myapp/
Run Code Online (Sandbox Code Playgroud)