我是一个" hello world"相当于使用sinatra和rack。
有问题的命令wrk -t12 -c400 -d30s
:12个线程,400个打开的HTTP连接,30秒。
架:
require 'rack'
app = Proc.new do |env|
['200', {'Content-Type' => 'text/html'}, ['A barebones rack app.']]
end
Rack::Handler::Thin.run app
# wrk $ wrk -t12 -c400 -d30s http://localhost:8080
# Running 30s test @ http://localhost:8080
# 12 threads and 400 connections
# Thread Stats Avg Stdev Max +/- Stdev
# Latency 11.82ms 38.97ms 488.51ms 99.32%
# Req/Sec 705.04 568.62 2.20k 61.82%
# 16576 requests in 30.08s, 1.55MB read
# Socket errors: connect 157, read 274, write 0, timeout 0
# Requests/sec: 551.05
# Transfer/sec: 52.74KB
屈:
require 'sinatra'
get '/' do
status 200
headers \
'Content-Type' => 'text/html'
'A barebones rack app.'
end
# wrk $ wrk -t12 -c400 -d30s http://localhost:4567
# Running 30s test @ http://localhost:4567
# 12 threads and 400 connections
# Thread Stats Avg Stdev Max +/- Stdev
# Latency 40.12ms 90.46ms 1.39s 98.67%
# Req/Sec 265.47 147.50 1.17k 73.15%
# 90322 requests in 30.08s, 18.78MB read
# Socket errors: connect 157, read 333, write 0, timeout 0
# Requests/sec: 3002.52
# Transfer/sec: 639.21KB
规格:
如果Rack和Sinatra都运行Thin,那么Sinatra如何管理3002.52~req / s,而纯Rack只管理551.05 req / s?我错过了什么?
答案 0 :(得分:0)
我没有安装wrk
,我没有心情安装,但我使用time
运行了两个示例:
# run.sh
for i in {1..1000}
do
curl localhost:8080/ > /dev/null 2>&1
done
# sinatra, run via `bundle exec ruby sinatra.rb -p 8080`
$ time sh run.sh
sh run.sh 3.67s user 2.79s system 66% cpu 9.768 total
# rack, run via `bin/rackup config.ru`
$ time sh run.sh
sh run.sh 3.65s user 2.87s system 74% cpu 8.799 total
# sinatra with the puma server, by adding the line `set :server, "puma"`
$ time sh run.sh
sh run.sh 3.67s user 2.71s system 92% cpu 6.924 total
我的结果非常相似,所以也许它与wrk
或您的系统有关。我正在运行OSX Mavericks,但我发现this answer表示要使用time
进行基准测试,您应该使用chrt
来避免与其他进程争用。我不确定OS {等同于chrt
是什么。也许这就是你的系统上发生了什么,或者无论出于什么原因,端口都可能以不同的速度运行。
我还使用bundle install --binstubs --path vendor.noindex
对我的宝石进行了沙盒化,也许这会对你的系统产生影响。
否则,我看不出有任何这种差异的原因。我对我得到的结果感到有些惊讶,因为我预计Sinatra会比Rack重一点,但是对于更复杂或更大的应用程序来说,似乎有些不同。或许不是,Sinatra是一个如此整洁的小图书馆。