很多的web应用在搭建服务器完成后,为了让搭建的服务能够满足用户的访问需求,通常需要测试自己应用的并发连接能力。需要使用一些压测工具,本文介绍一些免费的开源的压测工具,可以用于简单的压力测试(实验均在Linux系统下)。
1.ab工具
ab的全称是Apache Bench,是Apache自带的网络压力测试工具,ab命令对发出负载的计算机要求很低,不会占用很高CPU和内存,但也能给目标服务器产生巨大的负载,能实现基础的压力测试。在进行压力测试时,最好与服务器使用交换机直连,以获取最大的网络吞吐量。(云服务器可以选择内网相连)
ab的安装很简单,安装Apache会自动安装,如果要单独安装ab,可以使用yum安装:
yum install httpd-tools –y
基本概念:
• 吞吐率(Requests per second)
概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
Request per second = Complete requests / Time taken for tests
• 并发连接数(The number of concurrent connections)
概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
• 并发用户数(The number of concurrent users,Concurrency Level)
概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。
• 用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即
Time per request = Time taken for tests /( Complete requests / Concurrency Level)
• 服务器平均请求等待时间(Time per request: across all concurrent requests)
计算公式:处理完成所有请求数所花费的时间 / 总请求数,即
Time taken for / testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也=用户平均请求等待时间/并发用户数,即Time per request / Concurrency Level
ab命令选项 可以使用 ab -–help查看全部的命令参数
ab命令最基本的参数是-n和-c:
-n 执行的请求数量
-c 并发请求个数
其他参数:
-t 测试所进行的最大秒数
-p 包含了需要POST的数据的文件
-T POST数据所使用的Content-type头信息
-k 启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求,默认时,不启用KeepAlive功能
ab –n 100 –c 10 http://39.1**.15.233/home/ 测试的自己的网站(100请求,10并发)
网络上消耗的时间的分解:
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 43 197.3 2 1008
Processing: 11 1174 1506.4 858 13033
Waiting: 10 551 1381.4 220 13026
Total: 12 1218 1489.6 1017 13039
每个请求处理时间的分布情况:
50%的处理时间在1017ms内,66%的处理时间在1441ms内...,重要的是看90%的处理时间。
Percentage of the requests served within a certain time (ms)
50% 1017
66% 1441
75% 1655
80% 1862
90% 2476
95% 3167
98% 3562
99% 13039
100% 13039 (longest request)
在实际测试的时候可以酌情增加连接数和用户数,以得到最接近准确的并发数值。
- Webbench
Webbench是知名的网站压力测试工具,能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。
webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。
Webbench最多可以模拟3万个并发连接去测试网站的负载能力
下载安装webbench
wget http://www.ha97.com/code/webbench-1.5.tar.gz
tar -zvxf webbench-1.5.tar.gz
编译安装
查看命令参数提示
测试
webbench -c 50 -t 10 http://39.1..233/home/
模拟五十个用户访问自己的网站10秒,请求的URL 后端如果报错,就加一个“/”。
3.http_load
http_load是一款基于Linux平台的web服务器性能测试工具,用于测试web服务器的吞吐量与负载,web页面的性能。
同样需要下载安装
wget http://www.acme.com/software/http_load/http_load-12mar2006.tar.gz
tar -zvxf http_load-12mar2006.tar.gz
cd http_load-12mar2006
make && make install
查看帮助
使用
创建urls文件,文件里面写要测试的URL
vim urls
使用示例
./http_load -rate 5 -seconds 10 urls
-parallel 简写-p :含义是并发的用户进程数。
-fetches 简写-f :含义是总计的访问次数
-rate 简写-p :含义是每秒的访问频率
-seconds简写-s :含义是总计的访问时间
执行结果:
说明执行了一个持续时间10秒的测试,每秒的频率为5。
49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds
5916 mean bytes/connection
4.89274 fetches/sec, 28945.5 bytes/sec
msecs/connect: 28.8932 mean, 44.243 max, 24.488 min
msecs/first-response: 63.5362 mean, 81.624 max, 57.803 min
HTTP response codes:
code 200 -- 49
结果分析:
1.49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds
说明在上面的测试中运行了49个请求,最大的并发进程数是2,总计传输的数据是289884bytes,运行的时间是10.0148秒
2.5916 mean bytes/connection
说明每一连接平均传输的数据量289884/49=5916
3.4.89274 fetches/sec, 28945.5 bytes/sec
说明每秒的响应请求为4.89274,每秒传递的数据为28945.5 bytes/sec
4.msecs/connect: 28.8932 mean, 44.243 max, 24.488 min
说明每连接的平均响应时间是28.8932 msecs,最大的响应时间44.243 msecs,最小的响应时间24.488 msecs
5.msecs/first-response: 63.5362 mean, 81.624 max, 57.803 min
6、HTTP response codes: code 200 – 49
说明打开响应页面的类型,如果403的类型过多,那可能要注意是否系统遇到了瓶颈。
特殊说明:这里,我们一般会关注到的指标是fetches/sec、msecs/connect
他们分别对应的常用性能指标参数
Qpt-每秒响应用户数和response time,每连接响应用户时间。
测试的结果主要也是看这两个值。当然仅有这两个指标并不能完成对性能的分析,我们还需要对服务器的cpu、men进行分析,才能得出结论
以上介绍了三种开源免费的压测工具,使用都比较简单,类似的工具还有很多,如siege等,不再一一累述。
如果需要专业的模拟多用户的并发访问的压力测试,可以使用付费产品,如阿里云PTS压力测试。