ApacheBenchを使用してArchLinuxVPSで負荷テストを行う方法
序章
負荷テストは、展開する前に行うことをお勧めします。 簡単に説明することはできませんが、プロジェクトの最良のシナリオをすばやく確立してから、より詳細なテストを実行することをお勧めします。
ApacheBench ツール(ab)は、任意の数の同時リクエストを送信することでテストサーバーをロードできます。 abはApacheのインストールをテストするために設計されましたが、任意のHTTPサーバーのベンチマークに使用できます。
このチュートリアルでは、さまざまなサーバーを使用するRubyインタープリターが負荷の下でどのように機能するかを確認します。 チュートリアルの手順は、新しいArchLinuxx86_64イメージを想定しています。 結果は512MBの液滴から得られました。
インストール
パッケージデータベースを更新します。
pacman -Sy
ApacheBenchにアクセスするには、apacheパッケージをインストールします。 または、AURのapache-toolsパッケージに含まれています。
pacman -S apache
制限付き特権ユーザー
次に、Rubyを管理するユーザーを作成します。 次のセクションのコマンドの一部をrootとして実行することはお勧めできません。
useradd -m -d /home/test test
新しいユーザーに切り替えます。
su test
RVM
Rubyバージョンマネージャーを使用すると、さまざまなRuby環境で簡単に作業できます。 特定のRubyバージョンをインストールしてgemsetを分離するプロセスを処理します。 現在、Webサイトからbashスクリプトを実行してインストールされています。
\curl -L https://get.rvm.io | bash -s stable
rvmコマンドを使用するには、最初にrvmスクリプトを実行する必要があります。
source ~/.rvm/scripts/rvm
次に、Ruby2.0.0をインストールします。 RVMは通常ソースからRubyを構築するため、この手順には時間がかかる場合があります。
rvm install 2.0.0
新しいRubyに切り替えます。 これは、インストール後にデフォルトで発生する可能性がありますが、チェックしても問題はありません。
rvm use 2.0.0
テスト
Rubyがインストールされたので、簡単なサイトを作成して、処理できるリクエストの数を確認できます。
Sinatraをインストールします。 これは、RubyWebアプリケーションを作成するためのマイクロフレームワーク/DSLです。 –no-*フラグはドキュメントをスキップします。
gem install sinatra --no-rdoc --no-ri
「helloworld」をエコーするだけのサンプルsinatraアプリを作成します。
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を使用してテストを実行します。 100の同時実行で1000のリクエストを使用しました。 パスの最後にある最後の「/」を忘れないでください。
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でサーバーに割り込んでください。
Thin は、解析にMongrelを使用し、非ブロッキングIOにEventMachineを使用する人気のあるrubyWebサーバーです。 Thinをインストールして、サーバーを再実行します。 SinatraはThinを自動的にロードし、通知する必要があります(「…Thinからのバックアップあり」)。
gem install thin
ruby app.rb
ここで、負荷テストを再試行します。 今回はもう少し速いはずです。
注:Thinはローカルホスト経由の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は1000リクエスト/秒以上でWEBrickよりも著しく高速なサーバーを作成しているように見えます(リクエストの総数を増やすことを試みることができますが、私にとってはそれほど高くなりませんでした)。 悪くない。
結論
明らかに、これらの結果は現実的なサーバーパフォーマンスを反映していません。 HTTPはパズルのほんの一部です。 遅いテンプレートエンジンやデータベースは、これらの数値を大幅に引き下げます。 それでも、それはあなたに比較のための簡単な球場の数字を与えます。
あなたが興味を持っているかもしれない他のパフォーマンスツール: