介绍
任何部署之前,负载测试是一个好主意。 虽然它不是被嘲笑的东西,有时很快快速建立一个项目的最佳案例,然后在路上运行更详细的测试。
所述ApacheBench工具(AB)可以通过发送的并发请求的任意数量的负载测试的服务器。 虽然ab是为测试Apache安装而设计的,但它可用于对任何HTTP服务器进行基准测试。
在本教程中,我们将看到不同服务器的Ruby解释器如何在负载下执行。 教程步骤假设一个新的Arch Linux x86_64映像。 结果从512MBDroplet获得。
安装
刷新包数据库。
pacman -Sy
安装apache软件包以访问ApacheBench。 或者,它包含在AUR中的apache-tools包中。
pacman -S apache
受限特权用户
接下来,创建将管理Ruby的用户。 在下一节中以root身份运行一些命令不是一个好主意。
useradd -m -d /home/test test
切换到新用户。
su test
RVM
Ruby版本管理器可以方便地使用不同的Ruby环境。 它负责安装特定的Ruby版本和隔离gemsets的过程。 它目前通过从其网站运行bash脚本来安装。
\curl -L https://get.rvm.io | bash -s stable
为了使用rvm命令,您需要先运行rvm脚本。
source ~/.rvm/scripts/rvm
接下来,安装Ruby 2.0.0。 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 ~
vi 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: 0.0.0.0
Server Port: 4567
Document Path: /
Document Length: 11 bytes
Concurrency Level: 100
Time taken for tests: 2.950 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 288000 bytes
HTML transferred: 11000 bytes
Requests per second: 338.94 [#/sec] (mean)
Time per request: 295.041 [ms] (mean)
Time per request: 2.950 [ms] (mean, across all concurrent requests)
Transfer rate: 95.33 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 2.8 0 15
Processing: 117 285 94.3 268 553
Waiting: 70 248 91.8 234 544
Total: 117 286 93.6 271 553
Percentage of the requests served within a certain time (ms)
50% 271
66% 327
75% 354
80% 361
90% 413
95% 468
98% 512
99% 539
100% 553 (longest request)
我的结果约为300请求/秒。 WEBrick的速度并不为人所知。 使用Ctrl-c中断服务器。
薄是使用杂种解析和EventMachine的非阻塞IO一个流行的Ruby Web服务器。 安装Thin并再次运行服务器。 Sinatra应该自动加载Thin并让你知道(“...用Thin备份”)。
gem install thin
ruby app.rb
现在,再次尝试负载测试。 这次应该有点快。
注 :薄未出现,以允许通过本地主机ApacheBench连接,但它允许0.0.0.0或127.0.0.1。
ab -n 1000 -c 100 http://0.0.0.0:4567/
...
Concurrency Level: 100
Time taken for tests: 0.989 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 244000 bytes
HTML transferred: 11000 bytes
Requests per second: 1011.13 [#/sec] (mean)
Time per request: 98.899 [ms] (mean)
Time per request: 0.989 [ms] (mean, across all concurrent requests)
Transfer rate: 240.93 [Kbytes/sec] received
...
至少在这种情况下,看起来Thin使服务器速度明显快于WEBrick超过1000请求/秒(你可以尝试提高总请求,但它没有得到更高的我)。 不错。
结论
显然,这些结果不能反映真实的服务器性能。 HTTP只是一个谜题。 缓慢的模板引擎和/或数据库会显着拖动这些数字。 仍然,它给你一个快速ballpark数字用于比较。
您可能感兴趣的其他性能工具: