测试工具:ab
测试用例:
1.短连接
2.长连接
APP:
class App < Sinatra::Application
get '/' do
"HELLO "+Time.now.to_s
end
get '/sleep' do
sleep 5
"HELLO "+Time.now.to_s
end
end
run App.new
测试环境:
Unicorn:
100进程,
102
8080端口
Passenger:
基于nginx
100进程,
102
8081端口
测试结果:
场景1:
ab -c 100 -n 10000 10.1.166.138:8080/ => rps:1634
ab -c 100 -n 10000 10.1.166.138:8081/ => rps:1318
场景2:
ab -c 100 -n 100 10.1.166.138:8080/sleep?vcatwbwrge => rps:19.65
ab -c 100 -n 100 10.1.166.138:8081/sleep?v34rnjnf9 => rps:1.17
结果比较,unicorn比passenger性能看似好很多,但我不清楚如何关闭缓存,我对这两个东西的配置还不是很熟悉,所以我猜测在测试过程中可能会有读取缓存页的情况,这会使得测试结果看起来速度更快。
不过passenger基于nginx,所以支持的并发访问数要比unicorn高,比如测试1000并发的第二个场景时,unicorn出现socket closed by peer的提示,然后ab终止,passenger没出现这个问题。实际生产环境unicorn不会出现在部署的最前端,也会用nginx作一层代理。
不管性能哪个更好,希望ruby的库们越来越优秀,越来越丰富。
ps:谁告诉我一下这两个server如何关闭cache?比如我用ab的话不能对每次url请求都生成一个随机数,这时候就需要关闭server的缓存。