測試工具: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的緩存。