如何使用ApacheBench在Ubuntu13.10VPS上进行负载测试

来自菜鸟教程
跳转至:导航、​搜索

介绍


在任何部署之前进行负载测试是一个好主意。 在运行更详细的测试之前快速为项目建立最佳案例场景是很好的。

ApacheBench 工具 (ab) 可以通过发送任意数量的并发请求来加载测试服务器。 尽管 ab 是为测试 Apache 安装而设计的,但它也可用于对任何 HTTP 服务器进行基准测试。

在本教程中,我们将看到具有不同服务器的 Ruby 解释器如何在负载下执行。 教程步骤假定一个新的 Ubuntu 13.10 x32 映像。 结果来自一个 512 MB 的液滴。

安装


刷新包数据库。

apt-get update

安装 apache2-utils 包以访问 ApacheBench。

apt-get install apache2-utils

有限特权用户


接下来,创建将管理 Ruby 的用户。 以 root 身份运行下一节中的某些命令不是一个好主意。

useradd -m -d /home/test -s /bin/bash -g sudo test

这个命令完成了什么:

  • useradd - 创建一个新用户
  • -m - 创建主目录
  • -d /home/test - 将用户的主目录设置为 /home/test
  • -s /bin/bash - 使用户的默认shell bash(Ubuntu默认使用破折号)
  • -g sudo - 将用户添加到 sudo 组(用于使用 sudo 运行命令)
  • test - 新用户的名字

设置新用户的密码。

passwd test

切换到新用户。

su test

虚拟机


Ruby 版本管理器使使用不同的 Ruby 环境变得容易。 它负责安装特定 Ruby 版本和隔离 gemset 的过程。 它目前是通过从他们的网站运行 bash 脚本来安装的。

\curl -L https://get.rvm.io | bash -s stable

为了使用 rvm 命令,您需要首先运行 rvm 脚本。

source ~/.rvm/scripts/rvm

如果你愿意,你可以把它放在你的 .bashrc 中,这样 rvm 在你以用户身份登录的任何时候都可用。

echo "source ~/.rvm/scripts/rvm" >> ~./bashrc

您可以通过检查类型的头部来验证是否正在使用 rvm 脚本。 它应该是一个函数而不是散列。

type rvm | head -1

rvm is a function

接下来,安装 Ruby 2.0.0。 RVM 将询问用户的密码,因为它需要安装各种依赖项才能生成 Ruby。 由于 RVM 从源代码构建 Ruby,因此此步骤可能需要一段时间。

rvm install 2.0.0

切换到新的 Ruby。 这可能会在安装后默认发生,但检查并没有什么坏处。

rvm use 2.0.0

测试


现在已经安装了 Ruby,您可以创建一个简单的站点并查看它可以处理多少请求。

安装 Sinatra。 它是用于创建 Ruby Web 应用程序的微框架/DSL。 --no-* 标志跳过文档。

gem install sinatra --no-rdoc --no-ri

创建示例 sinatra 应用程序,它只是回显“hello world”。

cd ~
vim app.rb

# app.rb
require 'sinatra'

get '/' do
  'hello world'
end

运行服务器。

ruby app.rb

随着服务器终于启动,您可以开始负载测试。 对 ab 的调用如下所示:

ab -n <num_requests> -c <concurrency> <addr>:<port><path>

打开另一个终端并再次 ssh 进入服务器。 使用 ApacheBench 运行测试。 我使用了 1000 个请求,并发性为 100。 不要忘记路径的最后一个“/”。

ab -n 1000 -c 100 http://localhost:4567/

Server Software:        WEBrick/1.3.1
Server Hostname:        localhost
Server Port:            4567

Document Path:          /
Document Length:        11 bytes

Concurrency Level:      100
Time taken for tests:   3.410 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      288000 bytes
HTML transferred:       11000 bytes
Requests per second:    293.23 [#/sec] (mean)
Time per request:       341.034 [ms] (mean)
Time per request:       3.410 [ms] (mean, across all concurrent requests)
Transfer rate:          82.47 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   2.0      0      11
Processing:   185  332  90.3    311     578
Waiting:       28  280  83.2    267     574
Total:        193  333  89.7    311     578

Percentage of the requests served within a certain time (ms)
  50%    311
  66%    357
  75%    423
  80%    446
  90%    467
  95%    480
  98%    490
  99%    501
100%    578 (longest request)

我的结果收敛于大约 300 个请求/秒。 WEBrick 并不以速度着称。 继续使用 Ctrl-c 中断服务器。

安装薄


Thin 是一个流行的 ruby Web 服务器,它使用 Mongrel 进行解析,使用 EventMachine 进行非阻塞 IO。 安装 Thin 并再次运行服务器。 Sinatra 应该会自动加载 Thin 并让您知道(“…with backup from Thin”)。

gem install thin
ruby app.rb

现在,再次尝试负载测试。 这次应该会快一些。

Server Software:        thin
Server Hostname:        localhost
Server Port:            4567

Document Path:          /
Document Length:        11 bytes

Concurrency Level:      100
Time taken for tests:   1.339 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      244000 bytes
HTML transferred:       11000 bytes
Requests per second:    747.00 [#/sec] (mean)
Time per request:       133.870 [ms] (mean)
Time per request:       1.339 [ms] (mean, across all concurrent requests)
Transfer rate:          178.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   1.8      0       8
Processing:    55  128  19.9    132     155
Waiting:       42  116  19.7    121     144
Total:         62  129  18.5    132     156

Percentage of the requests served within a certain time (ms)
  50%    132
  66%    135
  75%    137
  80%    139
  90%    144
  95%    149
  98%    152
  99%    155
100%    156 (longest request)

至少在这种情况下,看起来 Thin 以超过 700 个请求/秒的速度比 WEBrick 提供了一个明显更快的服务器(您可以尝试提高总请求数,但对我来说并没有提高多少)。

注意:我能够在 Arch Linux 小程序上获得 1000 个请求/秒

结论


显然,这些结果并不能反映实际的服务器性能。 HTTP 只是其中的一部分。 缓慢的模板引擎和/或数据库会显着降低这些数字。 尽管如此,它还是为您提供了一个快速的大致数字进行比较。

您可能感兴趣的其他性能工具:

提交人: [[“%3Ca|http]] ://robertqualls.com [[“%3C/a|”>罗伯特·夸尔斯]]