webbench进行web服务器压力测试思路

时间:2021-07-10 04:47:34

大家都知道webbench可以对web服务器进行压力测试,简单的模拟并发即可,但是缺少对测试结果的分析,从而不能够准确的找到服务器的瓶颈。
今天经同事启发,才准备罗列下测试思路,希望能够帮助大家。
影响负载主要有3个方面:
a.网络带宽,因此最好进行公网测试。
另:个人认为我们可以通过webbench首先模拟最大承载量,然后查看测试结果的bytes/sec来确定所占带宽,然后再来确定申请公网带宽,最好为最大带宽的40%左右。
由于本次测试由于是内网测试,网卡为百兆网卡,因此排除带宽问题。
b.apache/nginx性能没有优化;
c.web服务器负载过大; 2核 4G内存
d.mysql数据库压力过大;2核 4G内存
测试环境:172.16.8.102    apache,web用81端口
     172.16.8.100   mysql
  webbench安装
  cd /usr/local/src
  tar -zxvf webbench-1.5.tar.gz
  cd webbench-1.5
  make && make install
由于webbench在测试过程中也会消耗cpu资源,因此将其安装在mysql服务器上。
测试开始:
1.模拟600个客户端发起请求,持续时间60秒
[root@localhost webbench-1.5]# webbench -c 600 -t 60 http://172.16.8.102:81/Login.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://172.16.8.102:81/Login.php
600 clients, running 60 sec.

Speed=507921 pages/min, 2353330 bytes/sec.
Requests: 507913 susceed, 8 failed.
测试结果:
a.在此情况下2353330 bytes/sec估量此时带宽约为2.2Mbps,由于内网暂时忽略掉带宽。
b.测试过程中监控web服务器负载为0.25, 0.10, 0.03,Cpu(s): 28.0%us, 10.3%sy,  0.0%ni, 54.4%id,访问页面并没有出现卡滞现象
在同一硬件下,我们通过优化apache相关参数(主要是工作方式)后再次测试
httpd.conf默认为
<IfModule prefork.c>
StartServers      8
MinSpareServers   5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  10000
</IfModule>
我们修改下试试
<IfModule prefork.c>
StartServers      20
MinSpareServers   30
MaxSpareServers   45
ServerLimit      2000
MaxClients       2000
MaxRequestsPerChild  10000
</IfModule>
2.模拟600个客户端发起请求,持续时间60秒
[root@localhost webbench-1.5]# webbench -c 600 -t 60 http://172.16.8.102:81/Login.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://172.16.8.102:81/Login.php
600 clients, running 60 sec.

Speed=449034 pages/min, 2080482 bytes/sec.
Requests: 449025 susceed, 9 failed.
测试结果:
此时Cpu(s): 55.8%us, 19.3%sy,  0.0%ni, 10.8%id,访问页面并没有出现卡滞现象

测试结论:
在同等硬件下,两次测试结果几乎一样,而mysql服务器正常,web服务器cpu消耗太大,我们应该考虑升级服务器来重新进行测试。
当然我们还可以通过squid反向代理缓存加速,来减轻后端web服务器的压力,我这里用squid 80端口来反向代理apache 81,再来看下测试:
3.模拟2000个客户端发起请求,持续时间60秒
[root@localhost webbench-1.5]# webbench -c 2000 -t 60 http://172.16.8.102/Login.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.


Benchmarking: GET http://172.16.8.102/Login.php
2000 clients, running 60 sec.


Speed=708376 pages/min, 4811685 bytes/sec.
Requests: 708376 susceed, 0 failed.
测试结果:
Cpu(s): 21.9%us,  9.6%sy,  0.0%ni, 48.1%id
在同等cpu消耗下,2000并发都是成功的。
我再次加大压力,模拟4000个客户端发起请求,持续时间30秒:
[root@localhost webbench-1.5]# webbench -c 4000 -t 30 http://172.16.8.102/Login.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://172.16.8.102/Login.php
4000 clients, running 30 sec.

Speed=685846 pages/min, 4664574 bytes/sec.
Requests: 342923 susceed, 0 failed.
但是毕竟squid是重量级代理,它消耗cpu确实很大,如图:

webbench进行web服务器压力测试思路

从此图看出我们还是有必要升级服务的,加上squid后能够提高不少的并发量。


总结:

这里只测试到web服务器,而mysql服务器还没讲到,其实思路一样,看cpu,内存,负载;更要时刻查询mysql的状态,有无最大连接数限制,sql死锁等现象,程序内部有无可优化的地方等。

另外,我们可以单独写一个连接数据库并对其进行插入,删除,更新,查询等操作的页面,通过对其访问来测试数据压力。


好了,就讲到这把,希望能对大家有所帮助,有什么不对的地方请指正。