用Apache 的 ApacheBench 给web做性能压力测试
ApacheBench 是 Apache 服务器自带的一个web压力测试工具,缩写为 ab ,旨在高压高并发下体现出各种问题和瓶颈.
ab 命令会模拟多个用户同时访问一个url (伪装一个并发访问的环境).
此命令对本地cpu要求不高,内存要求也不多,但是会对访问目标服务器造成严重的负载甚至资源耗尽而宿机,很类似与cc攻击.
使用方法:
ab [option] [http://]host[:port]/path
[option] 是ab 命令提供的N多可选参数
-n
//requests Number of requests to perform
//在测试会话中所执行的请求个数(本次测试总共要访问页面的次数)。默认时,仅执行一个请求。
-c
//concurrency Number of multiple requests to make
//一次产生的请求个数(并发数)。默认是一次一个。
-t
//timelimit Seconds to max. wait for responses
//测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-p
//postfile File containing data to POST
//包含了需要POST的数据的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt 。 (配合-T)
-T
//content-type Content-type header for POSTing
//POST数据所使用的Content-type头信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p)
-v
//verbosity How much troubleshooting info to print
//设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 ---V
//显示版本号并退出。
-w
//Print out results in HTML tables
//以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-i
//Use HEAD instead of GET
// 执行HEAD请求,而不是GET。
-C
//cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复,用逗号分割。
提示:可以借助session实现原理传递 JSESSIONID参数, 实现保持会话的功能,如
-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。
-P
// proxy-auth-username:password 对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
ab 常用的命令 -n 和 -c你(-n 表示共要请求url多少次, -c 表示每次请求模拟多少个并发)命令如下:
zhangzhi@moke:~$ ab -n 1000 -c 10 http://127.0.0.1:8001/
测试结果如下:
下面简单说明下结果分析
zhangzhi@moke:~$ ab -n 1000 -c 10 http://127.0.0.1:8001/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: Server Hostname: 127.0.0.1 //访问的主机 Server Port: 8001 //访问端口 Document Path: / //页面访问路径,这里测试的首页 Document Length: 10240 bytes //页面大小 Concurrency Level: 10 //测试时模拟的并发数 Time taken for tests: 0.425 seconds //整个测试过程持续的时间 Complete requests: 1000 //完成的请求数量 Failed requests: 0 //失败的请求数量 Write errors: 0 Total transferred: 10315000 bytes //整个测试过程的网络传输量 HTML transferred: 10240000 bytes //整个测试过程HTML内容传输量 Requests per second: 2351.66 [#/sec] (mean) //web性能测试非常重要的一个指标,传说中的 qps 每秒查询次数 Time per request: 4.252 [ms] (mean) //web性能另一个重要指标,每个查询所耗时间 Time per request: 0.425 [ms] (mean, across all concurrent requests) //每个连接请求实际运行所需的时间 Transfer rate: 23688.82 [Kbytes/sec] received //平均每秒在网络上的流量 Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 1 Processing: 2 4 6.0 3 59 Waiting: 2 4 5.9 3 59 Total: 2 4 6.0 3 59 Percentage of the requests served within a certain time (ms) 50% 3 66% 3 75% 4 80% 4 90% 5 95% 9 98% 22 99% 56 100% 59 (longest request) //在测试过程中,50% 的请求响应时间小于3毫秒,75%的请求小于4毫秒,最大请求响应时间为59毫秒.