📅  最后修改于: 2020-12-07 04:22:23             🧑  作者: Mango
在本章中,我们将指导您如何在VPS上为Apache Bench设置环境。
内存-128 MB
磁盘空间-无最低要求
操作系统-没有最低要求
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安装。以下代码将帮助验证安装-
# ab -V
输出
This is ApacheBench, Version 2.3
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
当您看到上述终端输出时,表明您已经成功安装了Apache Bench。
从安全角度来看,对于系统管理员来说,创建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网站。让我们首先切换到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
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命令
options-我们要执行的特定任务的标志
URL-我们要测试的路径URL
我们需要了解不同的指标,以了解Ab返回的各种输出值。这是列表-
服务器软件-这是在第一次成功返回的HTTP标头中返回的Web服务器的名称。
服务器主机名-这是命令行中提供的DNS或IP地址。
服务器端口-这是ab连接到的端口。如果在命令行上未提供任何端口,则对于HTTP,默认为80;对于HTTP,默认为443。
SSL / TLS协议-这是客户端和服务器之间协商的协议参数。仅当使用SSL时才打印。
文档路径-这是从命令行字符串解析的请求URI。
文档长度-这是第一个成功返回的文档的大小(以字节为单位)。如果在测试过程中文档长度发生变化,则将响应视为错误。
并发级别-这是测试期间使用的并发客户端数(相当于Web浏览器)。
测试所需的时间-这是从创建第一个套接字连接到接收到最后一个响应的时间。
完成请求-收到成功响应的数量。
失败的请求-被视为失败的请求数。如果数字大于零,则将打印另一行,显示由于连接,读取,内容长度错误或异常而失败的请求数。
传输总数-从服务器接收的字节总数。此数字本质上是通过网络发送的字节数。
已传输的HTML-从服务器接收的文档字节总数。此数字不包括HTTP标头中接收的字节
每秒请求数-这是每秒请求数。该值是请求数除以总时间的结果。
每个请求的时间-每个请求花费的平均时间。第一个值是使用公式并发性*时间* 1000 /完成计算的,而第二个值是使用公式时间* 1000×完成的计算得出的
传输率-由公式totalread / 1024 /耗时计算的传输率。
从ab命令了解了输出值的标题之后,让我们尝试分析和理解初始测试的输出值-
Apache组织正在使用他们自己的Web服务器软件-Apache(版本2.4.7)
由于https,服务器正在侦听端口443。如果是http,则应该是80(默认值)。
对于100个请求,传输的总数据为58769字节。
测试在1.004秒内完成。没有失败的请求。
每秒请求数-99.56。这被认为是一个相当不错的数字。
每个请求的时间-100.444毫秒(用于10个并发请求)。因此,在所有请求中,它是100.444毫秒/ 10 = 10.044毫秒。
传输速率-接收到1338.39 [Kbytes / sec]。
在连接时间统计信息中,您可以观察到许多请求必须等待几秒钟。这可能是由于apache网络服务器将请求放入等待队列。
在我们的第一个测试中,我们测试了一个托管在不同服务器上的应用程序(例如,www.apache.org)。在本教程的后半部分,我们将测试在运行ab测试的同一服务器上托管的示例Web应用程序。这是为了便于学习和演示的目的。理想情况下,主机节点和测试节点应该不同以进行精确测量。
为了更好地学习ab,您应该比较并观察随着本教程的发展,输出值在不同情况下的变化。
在这里,我们将绘制相关结果,以了解随着请求数量的增加,服务器需要花费多少时间。为此,我们将在上一个命令中添加-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:11:37 2017 1496160697 41 38 80 13
...
现在让我们了解out.data文件中的列标题-
starttime-这是呼叫开始的日期和时间。
seconds-与启动时间相同,但采用Unix时间戳格式(date -d @ 1496160697返回启动时间输出)。
ctime-这是连接时间。
dtime-这是处理时间。
ttime-这是总时间(它是ctime和dtime的总和,数学上ttime = ctime + dtime)。
等待-这是等待时间。
对于这些多个项目如何相互关联的图形化可视化,请看以下图片-
如果我们在终端上工作或没有可用的图形, 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,总时间(以毫秒为单位)与请求数的关系。我们可以注意到,对于最初的10个请求,总时间在近100毫秒内,对于接下来的30个请求(从10日到40日),总时间增加到1100毫秒,依此类推。您的绘图必须根据out.data而不同。