序章


負荷テストは、展開する前に行うことをお勧めします。 簡単に説明することはできませんが、プロジェクトの最良のシナリオをすばやく確立してから、より詳細なテストを実行することをお勧めします。

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

あなたが興味を持っているかもしれない他のパフォーマンスツール:

提出者:http: //robertqualls.com