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はパズルのほんの一部です。 遅いテンプレートエンジンやデータベースは、これらの数値を大幅に引き下げます。 それでも、それはあなたに比較のための簡単な球場の数字を与えます。
あなたが興味を持っているかもしれない他のパフォーマンスツール: