网站性能压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题
ab测试
ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力
ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载,因此是某些DDOS可能使用这种方法。自己使用也须谨慎。否则一次上太多的负载,造成目标服务器直接因内存耗光死机,而不得不硬重启,得不偿失。
格式:ab [options] [http://]hostname[:port]/path
-n #请求个数、本次测试总共要访问页面的次数。
-t #并发数,默认是一次一个。
-t #测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
结果分析:
Server Software: Apache/2.2.15
Server Hostname: 192.168.88.122
Server Port: 80
Document Path: /
Document Length: 3985 bytes #页面大小
Concurrency Level: 50 #并发数
Time taken for tests: 0.074 seconds #测试时长
Complete requests: 100 #请求数
Failed requests: 0 #失败请求数
Write errors: 0
Non-2xx responses: 101
Total transferred: 421296 bytes #整个过程网络传输量
HTML transferred: 401197 bytes #HTML的传输量
Requests per second: 1344.05 [#/sec] (mean)
##每秒多少请求,这个是非常重要的参数数值,服务器的吞吐量
Time per request: 37.201 [ms] (mean) ##用户平均请求等待时间
Time per request: 0.744 [ms] (mean, across all concurrent requests)
##服务器平均处理时间,也就是服务器吞吐量的倒数
Transfer rate: 5529.72 [Kbytes/sec] received
#平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 7 6.7 7 19
Processing: 8 23 7.4 23 35
Waiting: 7 22 7.3 22 35
Total: 14 29 9.1 30 49
#网络上消耗的时间的分解
Percentage of the requests served within a certain time (ms)
50% 30
66% 35
75% 37
80% 38
90% 41
95% 42
98% 44
99% 49
100% 49 (longest request)
#整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于275毫秒,66%的用户响应时间小于298毫秒,最大的响应时间小于11843毫秒。对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数。
注意:在远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大),建议使用内网的另一台或者多台服务器通过内网进行测试,这样得出的数据,准确度会高很多。如果只有单独的一台服务器,可以直接本地测试,比远程测试效果要准确。
http_load
安装:tar xf http_load-14aug2014.tar.gz; cd http_load-14aug2014; make && make install
参数:
-p 并发访问进程数
-f 总的访问次数
-r 每秒的访问频率,限制大于1小于1000
-s 总的访问时间
通常参数组合:-p –f;-r -s
urls.txt 是你要访问的网址名,参数可以是单个的网址也可以是包含网址的文件。建议不能过多
特点:支持http、https协议,请求方式默认为GET方式。不支持POST方式。
# ./http_load -p 2 -f 10 urls.txt
10 fetches, 2 max parallel, 984142 bytes, in 1.2792 seconds
##请求数,最大的并行数,总计传输的数据,运行的时间
98414.2 mean bytes/connection
7.8174 fetches/sec, 769344 bytes/sec
#每秒响应请求数,每秒传输的数据
msecs/connect: 59.3131 mean, 66.998 max, 56.962 min
#连接的平均响应时间,最大响应时间,最小..
msecs/first-response: 65.8254 mean, 73.518 max, 58.01 min
8 bad byte counts
HTTP response codes:
code 200 – 10
#请求状态码
200成功,3xx重定向类
403,404客户端错误(服务器没有找到URL相符的资源) 如果403的类型过多,那可能要注意是否系统遇到了瓶颈
500 服务器内部错误
关注的重点是fetches/sec 、msecs/connect
siege
Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力。可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。siege可以从您选择的预置列表中请求随机的URL。所以siege可用于仿真用户请求负载,而ab则不能。但不要使用siege来执行最高性能基准调校测试,这方面ab就准确很多
安装:yum install siege #epel enable
参数:
格式:[protocol://]host.domain.com[:port][path/to/file]
-C,或--config 在屏幕上打印显示出当前的配置,配置是包括在他的配置文件$HOME/.siegerc中,可以编辑里面的参数,这样每次siege 都会按照它运行.
-v 运行时能看到详细的运行信息
-c n,或--concurrent=n 模拟有n个用户在同时访问,n不要设得太大,因为越大,siege 消耗本地机器的资源越多
-i,--internet 随机访问urls.txt中的url列表项,以此模拟真实的访问情况(随机性),当urls.txt存在是有效
-d n,--delay=n hit每个url之间的延迟,在0-n之间
-r n,--reps=n 重复运行测试n次,不能与 -t同时存在
-t n,--time=n 持续运行siege 'n'秒(如10S),分钟(10M),小时(10H)
-l 运行结束,将统计数据保存到日志文件中siege .log,一般位于/usr/local/var/siege .log中,也可在.siegerc中自定义
-b --benchmark 每个请求之间没有延时,也是很常用的设置
-f FILE, --file=FILE 指定用特定的urls文件运行siege ,默认为urls.txt,位于siege 安装目录下的etc/urls.txt
实例:siege -c 300 -r 100 -f url.txt
#-c是并发量,-r是重复次数。url.txt中每行都是一个url,随机访问。
#siege -c 30 -r 2 localhost
Transactions: 60 hits #完成测试数,并行数c * 重复数r
Availability: 100.00 % #成功率
Elapsed time: 2.04 secs #测试时长
Data transferred: 0.04 MB #传输的数据量
Response time: 0.00 secs #平均每个请求响应时间
Transaction rate: 29.41 trans/sec #每秒完成事务
Throughput: 0.02 MB/sec #平均每秒传输数据大小
Concurrency: 0.13 #最高并发连接数,当性能下降时,此值将加大
Successful transactions: 60 #成功事务数 http code < 400
Failed transactions: 0
Longest transaction: 0.03 #最长事务请求时间
Shortest transaction: 0.00