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 Benchmark和Siege)。计算机主机是 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)
归档时间: |
|
查看次数: |
1160 次 |
最近记录: |