web-dev-qa-db-ja.com

同時リクエストの増加に伴って静的ページの応答時間が長くなるのはなぜですか

Apacheで見ているパフォーマンスがわかりません。ある時点までは、より多くの同時Apache要求のパフォーマンスが少ないよりも優れていると思いますが、3つの同時要求を超えると、全体的なパフォーマンスは横ばいになります。たとえば、3つまたは4つの同時リクエストがある場合、同じリクエスト/秒が表示されます。同時リクエストが追加されるたびに、平均応答時間が長くなるため、全体的なリクエスト処理率は同じままです。

これをテストするために、slicehost上に新しいubuntu 10.04vmを作成しました。これは4コアのVMです。私はそれを設定しました

aptitude update
aptitude install Apache2 Apache2-utils curl
curl localhost/ # verify hello world static page works

次に、応答時間と要求/秒のベンチマークを行いました。

編集4:「forx in $(seq 1 40); do ab -n 10000 -c $ x -q localhost/| grepwhatever; done」のようなベンチマークを実行しました。

正確なコマンドとデータは https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0AurdDQB5QBe7dGtiLUc1SWdOeWQ4dGo3VDI5Yk8zbWc&output=html にあります。

テストの実行中、CPU使用率は各コアで約25%でした。

編集2:htopによると、メモリ使用量は45/245MBでした。

編集1:ubuntu 11.04 vmで同じことを試しましたが、全体的な問題は同じですが、パフォーマンスはさらに悪くなります。ほとんどのレベルの同時実行で約2100 reqs /秒になり、各コアで約50%のCPUを使用します。 。

編集3:実際のハードウェアで試してみたところ、4つまたは5つの同時リクエストの周りにピーク要求/秒が見られましたが、少し落ちてフラットになりました。

なぜこれが起こっているのか、ボトルネックが何であるかを理解する方法、またはこれを改善する方法を誰かが説明できますか?いくつか検索しましたが、答えが見つかりませんでした。

1
Dan Benamy

Apacheで見ているパフォーマンスがわかりません。ある時点までは、より多くの同時Apache要求のパフォーマンスが少ないよりも優れていると思いますが、3つの同時要求を超えると、全体的なパフォーマンスは横ばいになります。

期待どおりに表示されているようです。同時リクエストが増えると、Apacheのパフォーマンスがある程度まで向上し、パフォーマンスはフラットになります。驚いたように思われるのは、同時リクエストの数が少ない場合にポイントが発生することです。

なぜあなたがそれを驚くべきものだと思うのか分かりません。ページは確かにRAMにあるため、実際のディスクI/Oはありません。つまり、これは純粋にCPUバウンドおよびネットワークバウンドのアクティビティです。すべてのコアを拘束し、ネットワークを1つのリクエストで埋めることができる十分なリクエストがあれば、別のリクエストが発生します。待機している接続が増えると、状況が改善される理由はありません。

したがって、それは実際には制限要因が何であるかという問題を残すだけです。詳細がないとわかりにくいですが、システムのCPU使用率とネットワーク帯域幅を調べます。ほとんどの場合、CPUまたはネットワークインターフェイスのいずれかが限界に達しています。

1
David Schwartz

Apache httpd wikiの(まだ公式ではない)パフォーマンスドキュメントをチェックアウトしてください。

http://wiki.Apache.org/httpd/PerformanceScalingUp

結びの言葉:あなたの場合、「VM」が何を意味するのかわかりませんが、パフォーマンスのボトルネックになる可能性があります。

0
Igor Galić

ネットワークスタックのオーバーヘッドの影響が見られる可能性があります。同時実行性が高まると、同時に開く接続が増えるため、システムとApacheは、これらの接続を開いたり閉じたりするためにさらに努力する必要があります。これは通常、Apacheのパフォーマンスを低下させ、同時実行レベルでのリクエストあたりの平均時間が長くなります。

また、より高い同時実行レベルで実行されているApache子プロセスが多かったと思います。これには、これらを上下に回転させるのに時間がかかります。

Webサーバーと同じシステムでテストを実行している場合、ネットワークの問題はさらに複雑になる可能性があります。

TCP/IPスタック、キープアライブ設定(オンの場合)、およびタイムアウトを調整すると、これが改善される可能性があります。

ただし、これはApacheのスケーリングに関する長い間知られている問題です。

これがこのトピックに関する古典的な記事です。 PDF: http://www.stdlib.net/~colmmacc/Apachecon-EU2005/scaling-Apache-handout.pdf

0
jeffatrackaid