一 AB背景介绍  

  Apache附带的压力测试工具apache bench--简称ab,非常容易使用,并且完全可以摸你各种条件对Web服务器发起测试请求。ab可以直接在Web服务器本地发起测试请求,这对于需要了解服务器的处理性能至关重要,因为它不包括数据的网络传输时间以及用户PC本地的计算时间

  ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server. It is designed to give you an impression of how your current Apache installation performs. This especially shows you how many requests per second your Apache installation is capable of serving. - See more at: http://www.rickyzhu.com/129_quick-introduce-to-ab.html#sthash.SeO8xgfH.dpuf

支持的参数和参数的介绍如下:

ab [ -A auth-username:password ] [ -c concurrency ] [ -C cookie-name=value ] [ -d ] [ -e csv-file ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [ -i ] [ -k ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-username:password ] [ -q ] [ -s ] [ -S ] [ -t timelimit ] [ -T content-type ] [ -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ] [ -X proxy[:port] ] [ -y <tr>-attributes ] [ -z <td>-attributes ] [http://]hostname[:port]/path

ab的参数详细解释

普通的测试,使用-c -n参数配合就可以完成任务
格式: ./ab [options] [http://]hostname[:port]/path
参数:
-n 测试的总请求数。默认时,仅执行一个请求
-c 一次并发请求个数。默认是一次一个。
-H 添加请求头,例如 ‘Accept-Encoding: gzip’,以gzip方式请求。
-t 测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-p 包含了需要POST的数据的文件.
-T POST数据所使用的Content-type头信息。
-v 设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。
-w 以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-i 执行HEAD请求,而不是GET。
-C -C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复。

本文介绍AB的获取安装及应用实例。

二 AB的获取和安装

1 系统安装Apache,可以在/usr/bin路径下找到ab,或者whereis ab即可发现。

2 单独安装ab  http://www.netingcn.com/install-ab-without-httpd.html

ab运行需要依赖apr-util包,安装命令为:yum install apr-util

下载apache的rpm包,可以直接去官网手动下载,当然也可以使用命令yumdownloader来完成,yumdownloader是 yum-utils包下面的,如果没有安装yum-utils,则需要先安装它。因为解压apache的rpm包时会在当前目录下生成etc、var和 usr三个目录,所以建议先创建一个临时目录,命令如下:

mkdir ~/abtmp
cd ~/abtmp
yumdownloader httpd
rpm2cpio httpd-*.rpm | cpio -idmv

上述命令成功后,可以在~/abtmp下的usr/bin中看到一个名为ab的文件,复制到系统PATH下就大功告成,例如。

cp ~/abtmp/usr/bin/ab /usr/bin

可使用系统:win7  Linux 等等

三 实例

1 web的http请求,e.g.  ab -n 100 -c 5  http://baidu.com/

#-n 请求的总执行次数; -c 并发数 "http://baidu.com/" 待测url
[work@bjdhj-118-56 ~]$ ab -n 100 -c 5 http://baidu.com/
#首先是Apache的版本信息
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/ Benchmarking baidu.com (be patient).....done Server Software: Apache
Server Hostname: baidu.com #请求的服务
Server Port: 80      #请求端口 Document Path: /       #
Document Length: 81 bytes   #页面长度 Concurrency Level: 5       #并发数
Time taken for tests: 0.125373 seconds  #总耗时
Complete requests: 100          #总访问次数
Failed requests: 0           #注1
Write errors: 0
Total transferred: 37600 bytes     #总共传输字节数,包含http的头信息等
HTML transferred: 8100 bytes      #html字节数,实际的页面传递字节数
Requests per second: 797.62 [#/sec] (mean)  #每秒多少请求,这个是非常重要的参数数值,服务器的吞吐量
Time per request: 6.269 [ms] (mean)     #用户平均请求等待时间
Time per request: 1.254 [ms] (mean, across all concurrent requests)  #服务器平均处理时间,也就是服务器吞吐量的倒数
Transfer rate: 287.14 [Kbytes/sec] received    #每秒获取的数据长度 Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 1 0.4 1 3
Processing: 3 4 1.2 4 12
Waiting: 3 3 1.3 4 11
Total: 5 5 1.3 5 13 Percentage of the requests served within a certain time (ms)
50% 5          # 50%的请求在5ms内返回
66% 6
75% 6
80% 6
90% 6
95% 8
98% 11
99% 13
100% 13 (longest request)

四 测试过程中会出现以下这些错误

1)ab并发数不能大于请求数,会提示 :"ab: Cannot use concurrency level greater than total number of requests"

2)请求数默认不能超过1024个,会提示:"socket: Too many open files (24)"

可用ulimit -n命令修改,例如:ulimit -n 8192 (设置用户可以同时打开的最大文件数)。

3)并发数默认不能大于20000个,会提示"ab: Invalid Concurrency [Range 0..20000]"

需要修改apache源代码support目录下ab.c文件,找到:#define MAX_CONCURRENCY 20000  将宏定义的值改大,重新编译安装apache。

4)提示:"apr_socket_recv: Connection reset by peer (104)"网上说是apr-util有些问题,不太稳定,多试几次就好了。

5)问题:关于Failed Request,为什么会有失败的请求?这个数据是什么含义?是否影响rps等测试结果。

答:可检查文件长度,如下,Length*complete+http头信息≈Total,说明所有请求正确发出

Document Length:        35137 bytes

Complete requests:      100

Total transferred:      3543782 bytes

在出现Failed Request时,会给出一行要求失败的各原因的数据统计,分别代表的意义:

 Connect      无法送出要求、目标主机连接失败、要求的过程中连线被中断

 Receive      无法接收要求

 Length       回应的内容长度不一致 ( 以 Content-Length 标头值为判断依据 )

 Exception   发生无法预期的错误

当第2次以后的HTTP Request所得到的HTTP Response Header得到的Content-Length与第一次不一致,就会得到Length的错误,并不影响测试结果。

6)问题:结果得到两个response time,相差很大,这两个数据自个什么意思?

答:解释如下。

ab有一个-c n参数,就是第一行的Concurrency Level,可以让ab创建n个并发链接测试。它们关系是:Tpr1=Tpr2*n ,Tpr2=/Rps

The first value is calculated with the formula concurrency *timetaken * /done while the second value is calculated with the formula timetaken *  

前一个衡量单个请求的延迟,cpu是分时间片轮流执行请求的,多并发的情况下,一个并发上的请求时需要等待这么长时间才能得到下一个时间片,计算方法Time per request: 60.444 [ms] (mean, across all concurrent requests)*并发数。通俗点说就是当以-c 10的并发下完成-n 1000个请求的同时,额外加入一个请求,完成这个求平均需要的时间。

后一个衡量性能的标准,它反映了完成一个请求需要的平均时间,在当前的并发情况下,增加一个请求需要的时间。计算方法Time taken for tests: 60.444 seconds/Complete requests: ,通俗点说就是当以-c 10的并发下完成-n 1001个请求时,比完成-n1000个请求多花的时间。

可以适当调节-c 和-n大小来测试服务器性能,借助htop指令来直观的查看机器的负载情况。

Apache-AB压力测试实例的更多相关文章

  1. apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))

    apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))   今天用apache 自带的ab工具测试,当并发量达到1000多的时 ...

  2. apache ab压力测试报错apr_socket_recv

    apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104)) apache 自带的ab工具测试,当并发量达到1000多的时候报错如下 ...

  3. Apache ab压力测试时出现大量的错误原因分析

    最近有一个测试任务,是测试nginx的并发请求到底能够达到多少的, 于是就用ab工具对其进行压力测试. 这压力测试一执行,问题就来了:发起10000次请求,并发100,错误的情况能达到30%--50% ...

  4. apache ab压力测试

    今天提到压力测试,想起以前看到的ab,于是又重新查找了下资料,并记录了下. ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问. 它的测试目标是基于URL的,因此,既可以用来 ...

  5. apache ab 压力测试工具

    Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力.Apache附带的ab工具(使用的PHP环境是WAMP集成环境, ...

  6. apache ab 压力测试

    我今天在慕课网中无意之间看到压力测试,可以模拟高并发; 顺便看了一下有没有相关的博客,发现下面的这个很详细; //在apache 安装目录下的bin,运行命令 ab -n1000 -c10 http: ...

  7. MAC 安装 apache ab 压力测试工具以及遇到的坑

    ab 是apache对 http服务器进行压力测试的工具,它可以测试出服务器每秒可以处理多少请求.本文记录mac版本安装 ab 的步骤以及遇到的坑. 下载 进入 apache ab官网 下载页面. 安 ...

  8. [转载] apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))

    遇见相同的问题. https://www.cnblogs.com/felixzh/p/8295471.html -------------------------------------------- ...

  9. Apache JMeter压力测试实例

    脚本录制 脚本录制,JMeter启用WEB代理,浏览器把代理上网设置为JMeter所在的IP地址,自己电脑就是127.0.0.1代理端口默认8080.至于浏览器修改代理上网服务器,不做截图. Jmet ...

  10. 4分钟apache自带ab压力测试工具使用: 2015.10.4

    2015.10.44分钟apache自带ab压力测试工具使用:win8.1 wampserver2.5 -Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b 可以参考一下部 ...

随机推荐

  1. Sharepoint delegate control

    <?xml version="1.0" encoding="utf-8"?> <Elements xmlns="http://sch ...

  2. python 读写INI配置文件

    # -*- coding: utf-8 -*-import ConfigParserimport os '''读写配置文件的类[section]logpath = D:\log\imageminsiz ...

  3. shell复习笔记----查找与替换

    查找文档 以grep 程序查找文本(匹配文本 matching text)相当方便.传统上有三种程序可以用来查找整个文本文件. grep 最早的文本匹配程序.其最简单的方式就是使用固定字符串 $ wh ...

  4. Hadoop的调度器总结

    Hadoop的调度器总结 随着MapReduce的流行,其开源实现Hadoop也变得越来越受推崇.在Hadoop系统中,有一个组件非常重要,那就是调度器,它的作用是将系统中空闲的资源按一定策略分配给作 ...

  5. 关于Java中try-catch-finally-return语句的思考

    我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后 ...

  6. 如何在Ubuntu下搭建Android NDK开发环境

    1 搭建Android SDK开发环境 参考在在Ubuntu下搭建Android SDK开发环境(图文)首先在Ubuntu下搭建Android SDK开发环境. 2 下载NDK开发包 打开官网: ht ...

  7. 学点PYTHON基础的东东--数据结构,算法,设计模式---单向链表

    看来看来,还是以下这个实现最优雅.. 其它的,要么NODE冗余,要么初始化丑陋... #!/usr/bin/env python # -*- coding: utf-8 -*- class Node: ...

  8. loadrunner java协议脚本要点

    常见问题 1. Error: Thread Context: Call to service of the driver failed, reason - thread context wasn't ...

  9. jmeter 测试java协议经验总结

    对java协议的良好支持,是jmeter比loadrunner优秀的地方,但是坑也不少,本文将相关点都整理下来备忘 一. 依赖的jar包 使用IDE开发jemter java协议脚本时,需要导入以下几 ...

  10. 深入理解ClassLoader(五)—类的卸载

    原文地址:http://yhjhappy234.blog.163.com/blog/static/316328322011101413730764/?suggestedreading&wumi ...