
在Apache服务器的套件中,有一个叫做 ab (ApacheBench) 的工具。
ApacheBench 主要是用来测试Apache服务器执行效率用的
ApacheBench 可以针对某个特定的 URL 仿真出连续的联机请求
同时还可以仿真出同时间点数个相同的联机请求,因此利用 ApacheBench 可帮助我们在网站开发期间仿真实际上线可能的情况,利用仿真出来的数据做为调整服务器设定或程序的依据。
参数说明
01 |
bixiaopeng@172-13-3-157 ~$ ab -h |
02 |
Usage: ab [options] [http[s]://]hostname[:port]/path |
04 |
//-n 在测试会话中所执行的请求个数。默认时,仅执行一个请求 |
05 |
-n requests Number of requests to perform |
06 |
//-c 一次产生的请求个数。默认是一次一个。 |
07 |
-c concurrency Number of multiple requests to make |
08 |
//-t 测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。 |
09 |
-t timelimit Seconds to max. wait for responses |
11 |
-b windowsize Size of TCP send/receive buffer, in bytes |
13 |
-p postfile File containing data to POST. Remember also to set -T |
15 |
-u putfile File containing data to PUT. Remember also to set -T |
16 |
//-T POST数据所使用的Content-type头信息。 |
17 |
-T content-type Content-type header for POSTing, eg. |
18 |
'application/x-www-form-urlencoded' |
19 |
Default is 'text/plain' |
20 |
//-v 设置显示信息的详细程度 - 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。 |
21 |
-v verbosity How much troubleshooting info to print |
22 |
//-w 以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。 |
23 |
-w Print out results in HTML tables |
25 |
-i Use HEAD instead of GET |
26 |
-x attributes String to insert as table attributes |
27 |
-y attributes String to insert as tr attributes |
28 |
-z attributes String to insert as td or th attributes |
29 |
//-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复。 |
30 |
-C attribute Add cookie, eg. 'Apache=1234. (repeatable) |
31 |
-H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip' |
32 |
Inserted after all normal header lines. (repeatable) |
33 |
-A attribute Add Basic WWW Authentication, the attributes |
34 |
are a colon separated username and password. |
35 |
//-P proxy-auth-username:password 对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。 |
36 |
-P attribute Add Basic Proxy Authentication, the attributes |
37 |
are a colon separated username and password. |
38 |
-X proxy:port Proxyserver and port number to use |
39 |
-V Print version number and exit |
40 |
-k Use HTTP KeepAlive feature |
41 |
-d Do not show percentiles served table. |
42 |
-S Do not show confidence estimators and warnings. |
43 |
-g filename Output collected data to gnuplot format file. |
44 |
-e filename Output CSV file with percentages served |
45 |
-r Don't exit on socket receive errors. |
46 |
-h Display usage information (this message) |
47 |
-Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers) |
48 |
-f protocol Specify SSL/TLS protocol (SSL2, SSL3, TLS1, or ALL) |
50 |
//-attributes 设置 属性的字符串. 缺陷程序中有各种静态声明的固定长度的缓冲区。另外,对命令行参数、服务器的响应头和其他外部输入的解析也很简单,这可能会有不良后果。它没有完整地实现 HTTP/1.x; 仅接受某些'预想'的响应格式。 strstr(3)的频繁使用可能会带来性能问题,即, 你可能是在测试ab而不是服务器的性能。 |
举个栗子
参数很多,一般我们用 -c 和 -n 参数就可以了. 例如:
01 |
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ ab -c 10 -n 1000 http://www.wirelessqa.com/?p=143 |
02 |
This is ApacheBench, Version 2.3 <$Revision: 655654 $> |
03 |
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ |
04 |
Licensed to The Apache Software Foundation, http://www.apache.org/ |
07 |
Benchmarking www.wirelessqa.com (be patient) |
08 |
Completed 100 requests |
09 |
Completed 200 requests |
10 |
Completed 300 requests |
11 |
Completed 400 requests |
12 |
Completed 500 requests |
13 |
Completed 600 requests |
14 |
Completed 700 requests |
15 |
Completed 800 requests |
16 |
Completed 900 requests |
17 |
Completed 1000 requests |
18 |
Finished 1000 requests |
24 |
Server Hostname: www.wirelessqa.com |
28 |
Document Path: /?p=143 |
29 |
Document Length: 40865 bytes |
33 |
Time taken for tests: 349.234 seconds |
34 |
Complete requests: 1000 |
36 |
(Connect: 0, Receive: 0, Length: 674, Exceptions: 0) |
38 |
Total transferred: 41114189 bytes |
39 |
HTML transferred: 40889965 bytes |
40 |
Requests per second: 2.86 [#/sec] (mean) |
41 |
Time per request: 3492.343 [ms] (mean) |
42 |
Time per request: 349.234 [ms] (mean, across all concurrent requests) |
43 |
Transfer rate: 114.97 [Kbytes/sec] received |
47 |
min mean[+/-sd] median max |
48 |
Connect: 35 161 401.6 59 3394 |
49 |
Processing: 571 3282 2723.1 2648 28374 |
50 |
Waiting: 309 654 767.3 538 21420 |
51 |
Total: 610 3443 2777.4 2826 28514 |
54 |
Percentage of the requests served within a certain time (ms) |
63 |
100% 28514 (longest request) |
结果:在同一时间有10个访问请求的情况下,完成1000次请求,失败674次,共花时间349.234秒,这个页面每秒平均处理2.86个请求
具体分析
01 |
//-c每次发送10个,-n 共发送1000次请求 |
03 |
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ ab -c 10 -n 1000 http://www.wirelessqa.com/?p=143 |
04 |
This is ApacheBench, Version 2.3 <$Revision: 655654 $> |
05 |
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ |
06 |
Licensed to The Apache Software Foundation, http://www.apache.org/ |
08 |
Benchmarking www.wirelessqa.com (be patient) |
09 |
Completed 100 requests |
10 |
Completed 200 requests |
11 |
Completed 300 requests |
12 |
Completed 400 requests |
13 |
Completed 500 requests |
14 |
Completed 600 requests |
15 |
Completed 700 requests |
16 |
Completed 800 requests |
17 |
Completed 900 requests |
18 |
Completed 1000 requests |
19 |
Finished 1000 requests |
24 |
Server Hostname: www.wirelessqa.com |
29 |
Document Path: /?p=143 |
31 |
Document Length: 40865 bytes |
36 |
Time taken for tests: 349.234 seconds |
38 |
Complete requests: 1000 |
40 |
//Failed requests给出了失败原因统计: |
41 |
//Connect:无法送出请求,目标主机连接失败,要求过程中连线被中断 |
42 |
//Length:回应的内容长度不一致,以content-Length头文件为判断依据 |
43 |
//Exception:发生了无法预期的错误 |
44 |
//备注1:这里分析一下为何失败了674次,从下面的统计数据我们可以看出,失败请求都落在Length上面,原因是被测网页是动态内容,当第一次发出HTTP request与后面发出的HTTP request所响应的html Length是不同大小的(即每次响应的Content-Length大小不一致),所以才会引起Length失败,这里Length是以第一次取得的Content-Length为主,以后得到的Content-Length跟第一次的不一致,就会报Length错误,所以这类Length大小不一的失败在测试动态面面的压力测试中是合理的,可以不用管它。 |
46 |
(Connect: 0, Receive: 0, Length: 674, Exceptions: 0) |
50 |
Total transferred: 41114189 bytes |
52 |
//备注2:单个html文件的大小为40865,共发出1000次请求,40865000跟40889965差不多,所以1000次请求应该已经正确送出,没什么问题 |
53 |
HTML transferred: 40889965 bytes |
54 |
//关键指标之一,相当于 LR 中的 每秒事务数 ,后面括号中的 mean 表示这是一个平均值 |
55 |
Requests per second: 2.86 [#/sec] (mean) |
56 |
//关键指标之二,相当于 LR 中的 平均事务响应时间 ,后面括号中的 mean 表示这是一个平均值 |
57 |
Time per request: 3492.343 [ms] (mean) |
58 |
//每个请求实际运行时间的平均值,就是上面的时间 除以并发数 |
59 |
Time per request: 349.234 [ms] (mean, across all concurrent requests) |
62 |
//平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题 |
63 |
Transfer rate: 114.97 [Kbytes/sec] received |
67 |
min mean[+/-sd] median max |
68 |
Connect: 35 161 401.6 59 3394 |
69 |
Processing: 571 3282 2723.1 2648 28374 |
70 |
Waiting: 309 654 767.3 538 21420 |
71 |
Total: 610 3443 2777.4 2826 28514 |
73 |
//整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于2826 毫秒,66% 的用户响应时间小于3636 毫秒,最大的响应时间小于28514毫秒 |
74 |
Percentage of the requests served within a certain time (ms) |
75 |
50% 2826 // 就是有50%的请求都是在2826ms内完成的 |
83 |
100% 28514 (longest request) |
- Gatling新一代压力测试工具,新一代服务器性能测试工具Gatling
Gatling新一代压力测试工具新一代服务器性能测试工具Gatlinghttp://www.infoq.com/cn/articles/new-generation-server-testing-to ...
- 性能测试工具 Web Service 性能测试工具比较
[转自]https://testerhome.com/topics/3003 背景 希望选择一款Web Service性能测试工具,能真实模拟大量用户访问网站时的请求,从而获取服务器当前的请求处理能力 ...
- linux常用命令:Linux 文件类型与扩展名
Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文 ...
- linux常用命令:Linux 目录结构
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...
- linux常用命令:Linux 文件属性详解
Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loc ...
- Linux常用命令汇总 - Linux Shell Cheat Sheet
1. 查看Linux操作系统信息: uname -a cat /proc/version lsb_release -a 2. 设置ls显示的文件夹的颜色(将下面这条目录加在 .bashrc 文件最后) ...
- http_load(基于linux平台的一种性能测试工具)
http_load 是运行在linux操作系统上的命令行测试工具, 用来对网站做压力测试.http_load以并行复用的方式运行,用以测试web服务器的吞吐量和负载.但是它不同于大多数压力测试工具, ...
- linux主机上,UnixBench性能测试工具使用
1,下载 wget http://soft.laozuo.org/scripts/UnixBench5.1.3.tgz [root@VM_0_15_centos test]# [root@VM_0_ ...
- Linux常用命令03
上篇我们写到,如何编辑文件,我们有时候,在编辑的时候,有可能会异常的退出,这样的话, linux会针对这个文件生成一个swp文件,当你下次进入vi模式时,就会提示你一个错误 这样,即使你按enter键 ...
- 菜鸟之路——Linux基础::计算机网络基础,Linux常用系统命令,Linux用户与组权限
最近又重新安排了一下我的计划.准备跟着老男孩的教程继续学习,感觉这一套教程讲的很全面,很详细.比我上一套机器学习好的多了. 他的第一阶段是Python基础,第二阶段是高等数学基础,主要将机器学习和深度 ...
随机推荐
- Android Studio快速开发之道(各种语法糖)
现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. Post ...
- Linux磁盘空间爆满,MySQL无法启动
OS: Cent OS 6.3 DB: 5.5.14 看到一个帖子,在服务器上安装了oracle和mysql数据库,mysql数据库忘记开启innodb_file_per_table,导致插入测试数据 ...
- WPF-控件-层级控件-TreeView
<?xml version="1.0" encoding="utf-8" ?> <Data xmlns=""> &l ...
- js中typeof可以准确判断哪些变量类型
typeof 运算符返回一个用来表示表达式的数据类型的字符串. 可能的字符串有:"number"."string"."boolean".& ...
- nginx error_page 404 用 php header 无法跳转
nginx error_page 404 用 php header 无法跳转 之前用Apache的时候,只需要设置 ErrorDocument 404 /404.php 就可以在 404.php 中根 ...
- iOS 进阶 第三天(0326)
0326 Xib:描述软件界面,轻量级,一般用来描述局部界面 Xib的获取,如下图所示: xib在我们开发的时候叫xib,但如果运行在我们手机里会生成nib.所以xib和nib两种方法来访问xib
- UIWebView 需改userAgent 并且加载微信公共账号
需要注意的是需要获取原来的UIWebView的User-Agent,然后拼接上自己新的User-Agent,貌似直接替换原来的无效,另外,修改User-Agent之后重新创建UIWebView加载网页 ...
- execute、executeUpdate、executeQuery三者的区别(及返回值)
1. ResultSet executeQuery(String sql); 执行SQL查询,并返回ResultSet 对象. 2.int executeUpdate(String sql); 可执行 ...
- android support Percent支持库开发
Android的布局支持百分比的设置进行开发,来学习如何去实现它,不过看起来会像网页的设置,比如宽度的设置属性是`layout_widthPercent`.在此之前,我们一般都会设置Linearlay ...
- Matlab找二维数组最大值
1.m先max(x)求出每列最大值,返回行向量,再max对行向量求出最大值,就是max(max(x)). 注意:max(x),不管x是行列向量,只要是向量,那么就返回一个值. 2.先x(:)转为按列的 ...