Apache Bench - 环境设置

在本章中,我们将指导您如何在VPS上为Apache Bench设置环境.

系统要求

  • 记忆 :  128 MB

  • 磁盘空间 : 没有最低要求

  • 操作系统 : 没有最低要求

安装Apache Bench

Apache Bench是一个独立的应用程序,并且不依赖于Apache Web服务器安装.以下是安装Apache Bench的两步过程.

步骤1 : 更新包数据库.

 
#apt-get update

请注意终端命令之前的符号#表示root用户正在发出该命令.

步骤2 : 安装apache2 utils包以访问Apache Bench.

 
#apt-get install apache2-utils

Apache Bench现已安装.如果您想测试托管在同一VPS上的Web应用程序,那么只需安装Apache Web服务器就足够了;

 
#apt -get install apache2

作为Apache实用程序,Apache Bench会在安装Apache Web服务器时自动安装.

验证Apache Bench安装

现在让我们看看如何验证Apache Bench安装.以下代码将帮助验证安装 :

 
#ab -V

输出

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

当您看到上述终端输出时,表示您已成功安装Apache Bench.

创建特权Sudo用户

从安全的角度来看,系统管理员创建sudo用户而不是以root身份工作被认为是一种很好的做法.我们将为此目的创建一个名为test的测试用户 :

# useradd -m -d /home/test -g sudo test

我们设置新用户的密码 :

 
 #passwd test

系统将提示输入用户测试的新密码.您可以输入一个简单的密码,因为我们只是在测试,而不是部署到生产服务器.通常sudo命令会提示您提供sudo用户密码;建议不要使用复杂的密码,因为这个过程变得很麻烦.

输出

Enter new UNIX password:
Retype new UNIX password:   
passwd: password updated successfully

测试Apache.org网站

在本节中,我们将测试Apache.org网站.让我们先切换到sudo用户测试 :

 
 #su test

首先,我们将测试Apache组织的网站, https://www.apache.org/.我们将首先运行命令,然后理解输出 :

 
 $ ab -n 100 -c 10 https://www.apache .org/

这里 -n 是基准测试会话要执行的请求数.默认情况下只执行单个请求,这通常会导致非代表性的基准测试结果.

并且 -c 是并发性并表示多个请求的数量一次表演.默认是一次一个请求.

因此在此测试中,Apache Bench将向Apache组织服务器发出100个并发10的请求.

输出

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.apache.org (be patient).....done

Server Software:        Apache/2.4.7
Server Hostname:        www.apache.org
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256

Document Path:          /
Document Length:        58769 bytes

Concurrency Level:      10
Time taken for tests:   1.004 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      5911100 bytes
HTML transferred:       5876900 bytes
Requests per second:    99.56 [#/sec] (mean)
Time per request:       100.444 [ms] (mean)
Time per request:       10.044 [ms] (mean, across all concurrent requests)
Transfer rate:          5747.06 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       39   46  30.9     41     263
Processing:    37   40  21.7     38     255
Waiting:       12   15  21.7     13     230
Total:         77   86  37.5     79     301

Percentage of the requests served within a certain time (ms)
  50%     79
  66%     79
  75%     80
  80%     80
  90%     82
  95%     84
  98%    296
  99%    301
 100%    301 (longest request)

运行第一次测试后,很容易识别此命令的使用模式,如下所示 :

# ab [options .....]  URL

其中,

  • ab :  Apache Bench命令

  • 选项 : 我们想要执行的特定任务的标志

  • URL : 我们要测试的路径网址

了解输出值

我们需要了解不同的用于理解ab返回的各种输出值的度量标准.这里是列表 : 去;

  • 服务器软件 : 它是第一次成功返回的HTTP标头中返回的Web服务器的名称.

  • 服务器主机名 : 它是命令行上给出的DNS或IP地址.

  • 服务器端口 : 它是ab连接的端口.如果在命令行上没有给出端口,则http默认为80,https为443.

  • SSL/TLS协议 : 这是客户端和服务器之间协商的协议参数.只有在使用SSL时才会打印.

  • 文档路径 : 这是从命令行字符串解析的请求URI.

  • 文档长度 : 它是第一个成功返回的文档的大小(以字节为单位).如果文档长度在测试期间发生变化,则响应将被视为错误.

  • 并发级别 : 这是测试期间使用的并发客户端数量(相当于Web浏览器).

  • 测试时间 : 这是从创建第一个套接字连接到收到最后一个响应的时间所花费的时间.

  • 完成请求  : 去;收到的成功回复数量.

  • 请求失败 : 被视为失败的请求数.如果该数字大于零,则将打印另一行,显示因连接,阅读,错误内容长度或异常而失败的请求数.

  • 总转移 : 从服务器接收的总字节数.这个数字基本上是通过网络发送的字节数.

  • HTML Transferred : 从服务器接收的文档字节总数.此数字不包括HTTP标头中收到的字节

  • 每秒请求数 : 这是每秒的请求数.此值是将请求数除以总时间的结果.

  • 每个请求的时间 : 每个请求花费的平均时间.第一个值使用公式并发* timetaken * 1000/done计算,而第二个值使用公式计算时间* 1000/完成

  • 转账率 : 通过公式计算的传输速率totalread/1024/timetaken.

负载测试输出的快速分析

在了解了ab命令输出值的标题后,让我们尝试分析并理解初始测试的输出值 :

  • Apache组织正在使用他们自己的Web服务器软件 :  Apache(版本2.4.7)

  • 由于https,服务器正在侦听端口443.如果它是http,它将是80(默认值).

  • 100个请求传输的总数据为58769个字节.

  • 测试在1.004秒内完成.没有失败的请求.

  • 每秒请求数减去; 99.56.这被认为是一个非常好的数字.

  • 每个请求的时间减去; 100.444 ms(10个并发请求).所以在所有请求中,它是100.444毫秒/10 = 10.044毫秒.

  • 传输速率 : 去;收到1338.39 [Kbytes/sec].

  • 在连接时间统计中,您可以观察到许多请求必须等待几秒钟.这可能是由于apache web服务器将请求放入等待队列.

在我们的第一个测试中,我们测试了一个应用程序(即, www.apache.org)托管在不同的服务器上.在本教程的后半部分,我们将测试托管在同一服务器上的示例Web应用程序,我们将从中运行ab测试.这是为了便于学习和演示的目的.理想情况下,主机节点和测试节点应该是不同的,以便进行准确测量.

为了更好地学习ab,您应该比较并观察输出值在不同情况下的变化情况教程.

绘制Apache Bench的输出

这里我们将绘制相关结果,以查看服务器需要多少时间作为请求数量增加.为此,我们将在上一个命令中添加 -g 选项,后跟文件名(此处为out.data),其中ab输出数据将保存并减去;

 
 $ ab -n 100 -c 10 -g out.data https://www.apache.org/

现在让我们在创建情节之前看到 out.data ;

 
 $ less out.data

输出

 
 starttime seconds ctime dtime ttime wait 
 Tue May 30 12:11:37 2017 1496160697 40 38 77 13 
 Tue May 30 12:11:37 2017 1496160697 42 38 79 13 
 Tue May 30 12 :2017年11月31日1496160697 41 38 80 13 
 ...

现在让我们了解 out.data中的列标题 file :

  • starttime : 这是通话开始的日期和时间.

  • : 与starttime相同,但是采用Unix时间戳格式(日期-d @ 1496160697返回starttime输出).

  • ctime : 这是连接时间.

  • dtime : 这是处理时间.

  • ttime : 这是总时间(它是ctime和dtime的总和,数学ttime = ctime + dtime).

  • 等待 : 去;这是等待时间.

有关这些多个项目如何相互关联的图示可视化,请查看以下内容image :

多个项目

如果我们正在终端或如果图形不可用, gnuplot 是一个很好的选择.我们将通过以下步骤快速理解它.

让我们安装并启动gnuplot :

 
 $ sudo apt-get install gnuplot 
 $ gnuplot

输出

G N U P L O T
Version 4.6 patchlevel 6    last modified September 2014
Build System: Linux x86_64

Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others

gnuplot home:     http://www.gnuplot.info
faq, bugs, etc:   type "help FAQ"
immediate help:   type "help"  (plot window: hit 'h')

Terminal type set to 'qt'
gnuplot>

当我们在终端上工作并假设图形不可用时,我们可以选择哑终端,它将通过终端本身提供ASCII输出.这有助于我们通过这个快速工具了解我们的情节.现在让我们为ASCII图准备终端.

 
 gnuplot> set terminal dumb

输出

Terminal type set to 'dumb'
Options are 'feed  size 79, 24'

因为,我们的gnuplot终端现在可以用于ASCII图,让我们绘制 out.data 文件中的数据 :

gnuplot> plot "out.data" using 9  w l

输出

  1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
       +      +      +     +      +      +      +"out.data" using 9 ****** +
       |                                                                   |
  1200 ++                       ********************************************
       |     *******************                                           |
  1000 ++    *                                                            ++
       |     *                                                             |
       |     *                                                             |
   800 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   600 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   400 ++   *                                                             ++
       |    *                                                              |
   200 ++   *                                                             ++
       |    *                                                              |
       +****  +      +     +      +      +      +      +     +      +      +
     0 ++-----+------+-----+------+------+------+------+-----+------+-----++
       0      10     20    30     40     50     60     70    80     90    100

我们已根据请求数绘制了第9列的ttime,总时间(以毫秒为单位).我们可以注意到,对于最初的十个请求,总时间接近100毫秒,对于接下来的30个请求(从10 th 到40 th ),它增加到1100毫秒,依此类推.根据您的 out.data ,您的情节必须有所不同.