4

私はそれよりもはるかに高い負荷を処理できるはずのビーフマシンでRailsアプリケーションをホストしています。ここにApacheBenchのテスト結果があります:大きなマシン上のRailsアプリケーションは、60リクエスト/秒のベンチマーク結果しか得られません。

ab -kc 250 -n 1000 -H "Accept-Encoding: gzip,deflate" https://www.mysite.com/ 

Server Software:  nginx/1.0.15 
Server Hostname:  www.mysite.com 
Server Port:   443 
SSL/TLS Protocol:  TLSv1/SSLv3,DHE-RSA-AES256-SHA,2048,256 

Document Path:  /
Document Length:  4258 bytes 

Concurrency Level:  250 
Time taken for tests: 16.498 seconds 
Complete requests:  1000 
HTML transferred:  4258000 bytes 
Requests per second: 60.61 [#/sec] (mean) 
Time per request:  4124.432 [ms] (mean) 
Time per request:  16.498 [ms] (mean, across all concurrent requests) 
Transfer rate:   282.83 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  302 1801 866.3 1623 3583 
Processing: 183 1993 867.9 1873 7050 
Waiting:  183 1880 864.2 1743 7036 
Total:  1397 3794 1389.0 3558 10580 

Percentage of the requests served within a certain time (ms) 
    50% 3558 
    66% 4012 
    75% 4179 
    80% 4712 
    90% 4947 
    95% 6411 
    98% 8376 
    99% 8380 
100% 10580 (longest request) 

ヤックたぶん私は間違っているかもしれませんが、私は毎秒60リクエストをはるかに上回ることができ、4.1秒よりも要求あたりの時間がはるかに短くなるように感じています。

アプリはc1.xlarge EC2インスタンス(7 GBのメモリ20個のEC2計算ユニット、2.5個のEC2計算ユニットを含む8個の仮想コア、1690 GBのインスタンスストレージ64ビットプラットフォーム、I/Oパフォーマンス:高い)。 ApacheBenchベンチマークが実行されたサイトルートは、アクションキャッシュされており、データベースにも触れません。

Started GET "/" for ##.###.###.## at Thu Apr 19 13:05:50 +0000 2012 
    Processing by OneOfMyControllers#index as HTML 
    Read fragment views/www.mysite.com/index (1.1ms) 
    Completed 200 OK in 2ms 

マシンはUbuntuの11.04を実行している、と私はRailsの3.1、RubyのEnterprise Editionの、乗客、およびnginxのを使用しています:それへの単一の要求は次のようになります。私のnginxの設定ファイルは次のようになります。

worker_processes 8; 
worker_rlimit_nofile 65535; 

events { 
    worker_connections 4096; 
} 

http { 
    passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-3.0.8; 
    passenger_ruby /usr/bin/ruby1.8; 

    rails_spawn_method smart; 
    rails_app_spawner_idle_time 0; 
    rails_framework_spawner_idle_time 0; 

    passenger_max_pool_size 60; 
    passenger_pool_idle_time 1000; 

    ssl_session_cache shared:SSL:3m; # 3MB can hold about 12k SSL cache sessions 
    ssl_session_timeout 5m; # average user spends 5 minutes on our site 

    include  mime.types; 
    default_type application/octet-stream; 

    sendfile  on; 
    tcp_nopush  on; # useful with the sendfile option 
    tcp_nodelay off; 

    keepalive_timeout  10; 
    send_timeout   10; 
    client_body_timeout 10; 
    client_header_timeout 10; 

    gzip    on; 
    gzip_static  on; 
    gzip_disable  "MSIE [1-6]\."; 
    gzip_comp_level 4; 
    gzip_buffers  16 4k; 
    gzip_min_length 1000; 
    gzip_proxied  any; 
    gzip_vary   on; 
    gzip_types  text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 
    gzip_http_version 1.0; # Amazon CloudFront uses HTTP/1.0            

    include /opt/nginx/conf/sites-enabled/*; 
} 

そして/opt/nginx/conf/sites-enabled/mysite.comの内側に、私が持っている:

server { 
    listen   80; 
    server_name mysite.com; 

    rewrite ^/(.*) http://www.mysite.com/$1 permanent; 
} 
server { 
    listen   443; 
    ssl   on; 
    server_name mysite.com; 

    ssl_certificate   /opt/mysite/ssl/wildcard_gandi_2012/combined-certification.crt; 
    ssl_certificate_key  /opt/mysite/ssl/wildcard_gandi_2012/monserveur.key; 
    ssl_protocols    SSLv3 TLSv1; 
    ssl_ciphers    HIGH:!ADH:!MD5; 
    ssl_prefer_server_ciphers on; 

    rewrite ^/(.*) https://www.mysite.com/$1 permanent; 
} 
server { 
    listen   80; 
    server_name  *.mysite.com www.mysite.com; 

    root /opt/mysite/public; 

    passenger_enabled on; 

    access_log /opt/mysite/log/nginx_access.log; 
    error_log /opt/mysite/log/nginx_error.log; 

    # Set the maximum file upload size to 25 MB. 
    client_max_body_size 25M; 
} 
server { 
    listen   443; 
    ssl    on; 
    server_name  *.mysite.com www.mysite.com; 

    ssl_certificate   /opt/mysite/ssl/wildcard_gandi_2012/combined-certification.crt; 
    ssl_certificate_key  /opt/mysite/ssl/wildcard_gandi_2012/monserveur.key; 
    ssl_protocols    SSLv3 TLSv1; 
    ssl_ciphers    HIGH:!ADH:!MD5; 
    ssl_prefer_server_ciphers on; 

    root /opt/mysite/public; 

    passenger_enabled on; 

    access_log /opt/mysite/log/nginx_access.log; 
    error_log /opt/mysite/log/nginx_error.log; 

    # Set the maximum file upload size to 25 MB. 
    client_max_body_size 25M; 

    # Asset caching 
    location ~ ^/(assets)/  { 
     root /opt/mysite/public; 
     gzip_static on; 
     access_log off; 
     expires 1y; 
     add_header Cache-Control public; 
     add_header Last-Modified ""; 
     add_header ETag ""; 
     break; 
    } 
} 

任意のアイデアなぜ私ができます」秒あたり60リクエストを超えることはありませんか?私は見落としている何かが明らかですか?

+0

ベンチマークを何度も繰り返しましたか?それはネットワークの問題になる可能性があります... – fuzzyalej

+0

うん、私はさらに、Railsアプリケーションと同じマシンから実行しようとしました。 – NudeCanalTroll

+1

Hmmm、ちょうどこれが見つかりました:http://blog.phusion.nl/2010/06/09/does-rails-performance-need-an-overhaul/多分60リクエスト/秒が標準ですか?私は、Railsアプリケーションの方がはるかに高い人がたくさんいるみたいですが。旅客は問題ですか? – NudeCanalTroll

答えて

1

あなたの大きな問題の1つはhttpsと思われます。

私はちょうどいくつかの比較ベンチマークを実行しました。私にとっては、そのような本当に基本的なページで2〜4倍のスピード低下を示しています。 HTTPページにヒットした場合、メトリクスは増加しますか?

また、お客様のステータス(rvmsudo passenger-status)を確認して、すべてのプロセスがロードされ、要求が均等に分散されていることを確認してください。

関連する問題