nginxにリバースプロキシ設定してapacheと連携させる・・・の性能測定
はじめに
前回、nginxにリパーズプロキシの設定をし、apacheと連携させrailsアプリを動かしましたが折角なので性能測定をし、それぞれ単独で動作させた場合と比較してみました。 以下、性能測定した組み合わせです。
- nginx + unicorn
- apache + passenger
- nginx + apache + passenger(前回構築したもの)
- WEBRick(おまけ)
性能テストをした環境
環境は前回構築した環境と同じで、macのvirtual box上のubuntuで動作させています。
- ubuntu 12.04 32bit メモリ1GB
- apache 2.2
- nginx 1.6
- ruby 2.00
- rails 4.1.0
※負荷ツールの実行はmacから実行させています。
それぞれの設定
nginx + unicorn
gemファイルにunicornを追加してインストールします。
nginx,unicornの設定項目は以下になります。
/etc/nginx/conf.d/test.conf
upstream test { server unix:/tmp/test.sock; } server { listen 80; root /home/test/rails_projects/sample_app/public; try_files $uri @test; server_name sample.jp; #access_log /var/www/test/logs/access.log; #error_log /var/www/test/logs/error.log; location @test { proxy_pass http://test; } location = /robots.txt { access_log off; log_not_found off; } location = /favicon.ico { access_log off; log_not_found off; } }
sample_app/config/unicorn.rb
worker_processes 2 listen '/tmp/test.sock' pid '/tmp/test.pid'
nginx + unicorn
こちらは前回構築したnginx、apache連携の設定とほぼ一緒です。ポートを80に変更し、nginxは停止させapacheのみを起動させてます。
/etc/apache2/ports.conf
NameVirtualHost *:80 Listen 80
/etc/apache2/sites-available/localhost
<VirtualHost *:80>
nginx + apache + passenger
前回の設定のままです。
アプリを用意する
今回呼び出しに使用したアプリはこんな感じです。
home_controller.rb
class HomeController < ApplicationController def index end end [/ruby] index.html.erb [ruby] home [/ruby] home/indexを呼び出すと、homeという文字が表示するというシンプルなものです。home/indexが呼び出された時に生成されるhtmlはこんな感じです。 [html]
[/html] 画面に表示されるhtmlにはrailsのデフォルトのcssやjsファイルが呼び出されています。よってnginxをリバースプロキシとして設定しapacheと連携した場合は、railsの処理はapacheが行い(nginxがapacheを呼び出す)、cssやjsファイルはnginxが処理するようになります。
負荷ツールで性能テストをしてみる
今回使用した負荷ツールはJmeterです。
JMeterはメジャーなパフォーマンス測定用のJavaアプリケーションツールです。ここでは特に細かい使い方等の説明はしません。
JMeterの設定
今回は、Ramp-Up期間(秒)、ループ回数はそれぞれ5に固定し、スレッド数を100,150,200,250,300に変化させ、HTTPリクエストを発行しました。簡単にいうと5秒間にHTTPリクエストをそれぞれ500,750,1000,1250,1500回なげたことになります。
統計リポートの結果
項目の説明
- Samples・・・サンプル数(実行数)
- Avarage・・・レスポンス時間の平均値(ミリ秒)
- Median・・・レスポンス時間の中央値(ミリ秒)
- 90% Line・・・レスポンス時間がこの値以下に全サンプルの90%が収まることを示す値
- Error %・・・エラーのパーセンテージ
- Min・・・最小レスポンス時間
- Max・・・最大レスポンス時間
- Throughput・・・単位時間あたりのプレビュー数(PV/単位時間)
- KB/sec・・・1秒あたりの平均転送速度KB
まとめ
今回の設定(ほぼ初期状態)と環境からすると結果はnginxが良かったことが分かりました。apacheに関してはWEBRickと同じリクエスト数でエラーが発生してしまいました。今回、期待していたnginx + apacheの結果はエラーは発生しなかったものの思ったほど良くなく残念でした。 今回はチューニングという観点では何も行っていない状態での結果でした。今度はある程度チューニングをして実施してみたいと思います。