boost ::asioを使用してC++でミニHTTPサーバーを開発しましたが、現在、複数のクライアントで負荷テストを行っていますが、CPUの飽和状態に近づくことができませんでした。私はAmazonEC2インスタンスでテストしており、1つのCPUの約50%、別のCPUの20%を使用しており、残りの2つはアイドル状態です(htopによる)。
詳細:
- サーバーはコアごとに1つのスレッドを起動します
- リクエストは受信され、解析され、処理され、レスポンスは書き出されます
- 要求は、メモリから読み取られるデータに対するものです(このテストでは読み取り専用)
- それぞれがJavaアプリケーションを実行し、25スレッドを実行し、リクエストを送信する2台のマシンを使用してサーバーを「ロード」しています
- 約230リクエスト/秒のスループットが見られます(これはアプリケーションリクエストであり、多くのHTTPリクエストで構成されています)
それで、この結果を改善するために私は何を見るべきですか?CPUがほとんどアイドル状態になっていることを考えると、その追加容量を活用して、たとえば800リクエスト/秒などのより高いスループットを実現したいと思います。
私が持っていたアイデア:
- リクエストは非常に小さく、多くの場合数ミリ秒で実行されます。クライアントを変更して、より大きなリクエストを送信/作成することができます(おそらくバッチ処理を使用して)
- Selectデザインパターンを使用するようにHTTPサーバーを変更できますが、これはここで適切ですか?
- ボトルネックが何であるかを理解するために、いくつかのプロファイリングを行うことができます