一、简介
Webbench是知名的网站压力测试工具,能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。
webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。
Webbench最多可以模拟3万个并发连接去测试网站的负载能力
二、安装webbench-1.5.tar.gz
1、将webbench-1.5.tar.gz文件上传至服务器的/opt/目录下;
2、对webbench-1.5.tar.gz文件进行解压操作:
[[email protected] opt]# tar -xvf webbench-1.5.tar.gz
webbench-1.5/
webbench-1.5/webbench.1
webbench-1.5/socket.c
webbench-1.5/webbench.c
webbench-1.5/Makefile
webbench-1.5/debian/
webbench-1.5/debian/rules
webbench-1.5/debian/dirs
webbench-1.5/debian/copyright
webbench-1.5/debian/control
webbench-1.5/debian/changelog
webbench-1.5/COPYRIGHT
webbench-1.5/ChangeLog
3、进入webbench-1.5目录进行编译操作:
[[email protected] opt]# cd webbench-1.5
[[email protected] webbench-1.5]# make &&make install
-bash: make: command not found
安装make编译器:
[[email protected] webbench-1.5]# yum -y install make
再次进行编译操作:
[[email protected] webbench-1.5]# make && make install
cc -Wall -ggdb -W -O -c -o webbench.o webbench.c
make: cc:命令未找到
提示cc命令未找到,安装gcc编译器:
[[email protected] ~]# yum -y install gcc automake autoconf libtool make
再次进行make编译:
[[email protected] webbench-1.5]# make && make install
cc -Wall -ggdb -W -O -c -o webbench.o webbench.c
webbench.c: 在函数‘alarm_handler’中:
webbench.c:77: 警告:未使用的参数‘signal’
cc -Wall -ggdb -W -O -o webbench webbench.o
ctags *.c
/bin/sh: ctags: command not found
make: [tags] 错误 127 (忽略)
install -s webbench /usr/local/bin
install -m 644 webbench.1 /usr/local/man/man1
install: 无法创建普通文件"/usr/local/man/man1": 没有那个文件或目录
编译成功:
[[email protected] webbench-1.5]# ll webbench
-rwxr-xr-x. 1 root root 24442 5月 10 18:55 webbench
webbench的使用说明:
[[email protected] webbench-1.5]# ./webbench
webbench [option]... URL
-f|--force Don‘t wait for reply from server.
-r|--reload Send reload request - Pragma: no-cache.
-t|--time <sec> Run benchmark for <sec> seconds. Default 30.
-p|--proxy <server:port> Use proxy server for request.
-c|--clients <n> Run <n> HTTP clients at once. Default one.
-9|--http09 Use HTTP/0.9 style requests.
-1|--http10 Use HTTP/1.0 protocol.
-2|--http11 Use HTTP/1.1 protocol.
--get Use GET request method.
--head Use HEAD request method.
--options Use OPTIONS request method.
--trace Use TRACE request method.
-?|-h|--help This information.
-V|--version Display program version.
三、使用
[[email protected] webbench-1.5]# ./webbench -t 30 -c 10 http://sports.163.com/
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://sports.163.com/
10 clients, running 30 sec.
Speed=54 pages/min, 423497 bytes/sec.
Requests: 27 susceed, 0 failed.
由执行结果可以算出tps的值:tps=Requests27/30sec
但是不知道任务是对还是错,在日志中查看
[[email protected] webbench-1.5]# ./webbench -t 1 -c 1 http://192.168.20.128/bugfree/index.php/site/login/
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://192.168.20.128/bugfree/index.php/site/login/
1 client, running 1 sec.
Speed=1979 pages/min, 143286 bytes/sec.
Requests: 33 susceed, 0 failed.
[[email protected] logs]# cat access_log |grep "/bugfree/index.php/site/login/ HTTP/1.0" | wc -l
34
为什么100个并发的时候比10个并发所发的请求数要少,因服务器的处理能力有限,服务器处理不过来,cpu切片。
四、测试结果分析
1、测试环境(软件、硬件、数据库数据、脚本、测试场景等)
判断2xx状态,不接收服务器的返回值
2、同时lr测试,环境都一样,数据不一样(2.1,2.3秒)
每一次的执行结果会不一样(why?差异在可接受范围内)
出现差异怎么办:多次测试取平均值
3、lr测试:2.9s 开发:日志打印1.8s
1)排除开发打的计时是否正确(请求数lr使用录制html方式录制,一个html请求可能对应多个url请求等)
2)client → webservice(代码、web容器) → db
①客户端发送请求时间
②请求传输时间
③服务器空闲线程取请求
④服务器代码执行时间
⑤请求传输到数据库时间
⑥数据库线程池拿到请求的时间
⑦数据库语法检查、语义分析、open表、生成执行计划、按照执行计划到内存或者磁盘中拿数据到内存中再返回、DML处理时间
⑧数据库处理结果返回到服务器时间
⑨服务器线程唤醒的时间
⑩服务器执行代码的时间
①①服务器执行结果返回客户端的时间
①②客户端接收数据的时间
开发的响应时间:比方说,在代码的调用sql前开始计时,执行完相关方法后停止计时,并且打印时间,从第④步开始计时到代码块执行完毕的时间,第⑩步的执行时间
响应时间相差大,慢在哪里?
分析:
步骤① ② ③ ①① ①②会慢,client端口是否有问题、网络是否有问题、线程池是否有性能问题(拿不到线程)