私はec2インスタンス上でRuby 1.9.2p290上で動作するRails 3.0.0 + passenger + apache2を使用しています。rails 3.0.0 + passenger + apache + Ruby 1.9.2
関連する旅客の設定(私は広範囲に影響なしに彼らとめちゃめちゃにしました):
PassengerMaxPoolSize 30 PassengerPoolIdleTime 0 PassengerMinInstances 10
はまた、私は、メモリやCPUバウンドないです確認しました。..
私はベンチマークをいくつか実行しており、その結果によって非常に混乱しています。私は5つの異なる.where()節を連鎖させる非常に複雑なクエリを呼び出します。 (言い換えれば、それはARELかなりを使用しています。)
私はCONCURRENCY WITHOUT 1000回の呼び出し(-c 1千-n例えば、AB)とApacheのベンチを実行すると、私は以下の取得:
Concurrency Level: 1
Time taken for tests: 222.799 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 489000 bytes
HTML transferred: 16000 bytes
Requests per second: 4.49 [#/sec] (mean)
Time per request: 222.799 [ms] (mean)
Time per request: 222.799 [ms] (mean, across all concurrent requests)
Transfer rate: 2.14 [Kbytes/sec] received
私は10に同時実行を設定して、それを実行すると
は今(例えば、ABは1000年-c 10 -n)、私は次の取得:
Concurrency Level: 10
Time taken for tests: 213.957 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 489001 bytes
HTML transferred: 16000 bytes
Requests per second: 4.67 [#/sec] (mean)
Time per request: 2139.567 [ms] (mean)
Time per request: 213.957 [ms] (mean, across all concurrent requests)
Transfer rate: 2.23 [Kbytes/sec] received
絶対に同時要求からもメリットはありません! 1秒あたりのリクエストはまだ4.5です。サーバーが要求を連続的に処理しているかのようです。
今、本当に奇妙な部分です。私はActiveRecordの問合せインタフェースから出力されたSQLクエリを見て、だけではなく、find_by_sqlを使用している場合、私はノー同時実行でこれを取得していない:
Concurrency Level: 1
Time taken for tests: 49.547 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 489000 bytes
HTML transferred: 16000 bytes
Requests per second: 20.18 [#/sec] (mean)
Time per request: 49.547 [ms] (mean)
Time per request: 49.547 [ms] (mean, across all concurrent requests)
Transfer rate: 9.64 [Kbytes/sec] received
ここには驚き。 find_by_sqlは、ActiveRecordとARELを使用してクエリを構築するよりも高速です。私は10に同時実行が設定された以前を実行した場合しかし、私が取得:秒あたりの要求は3倍にジャンプする方法
Concurrency Level: 10
Time taken for tests: 17.859 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 489000 bytes
HTML transferred: 16000 bytes
Requests per second: 55.99 [#/sec] (mean)
Time per request: 178.587 [ms] (mean)
Time per request: 17.859 [ms] (mean, across all concurrent requests)
Transfer rate: 26.74 [Kbytes/sec] received
注意してください。私の質問:
どうやってActiveRecord(とAREL)を使ってクエリをビルドすると、並行した要求があまりにも貧弱に応答するのですか? ActiveRecordは実際にそのCPUを集中的に使用できますか?