セットアップ:EC2サーバーはELBの背後で自動スケーリングし、RDS mysqlデータベースに接続し、すべての静的ファイルはクラウドフロントから提供されます。
EC2サーバーでnginxをWebサーバーとして実行しており、キープアライブを20に設定し、ワーカープロセス4 、。Codeigniterはバックエンドであり、codeigniterセッションを使用しています。
私は、パフォーマンス、包囲、apacheベンチマーク、blitz.ioをテストするために、多くのベンチマークを実行してきました。
私は2つの特定のページをテストしています。最初のパフォーマンスは非常に優れており、codeigniterセッションを使用しているため、データベースにアクセスしてci_sessionsデータベースを読み取って更新します。2番目のページは私が問題を抱えているページです。1人のユーザーで約0.4秒で完了する複数の結合でクエリを実行します。このクエリは最適化されており、私はInnoDBテーブルを使用しています。c10とn1000を使用したapacheベンチマークでは、リクエストの100%が634ミリ秒以内に返されます。
200を超える同時ユーザーを実行すると、問題が発生し始めます。EC2サーバーを追加しても効果はなく、CPUは約50%使用されています。RDSデータベースのモニタリングでは、CPUとメモリの使用量が70%未満であり、平均DB接続が35未満であることも示されています。
大規模なRDSインスタンスと大規模なEC2インスタンスに移行することでパフォーマンスが向上しました。これにより、ここでI/Oが機能するかどうか疑問に思います。
負荷テスト中にELBの外部でサーバーを起動し、このページにアクセスすると、1秒以内に戻ってきますが、ELB内で別のサーバーを起動すると、最大4〜5秒かかります。これは、私がRDSに過負荷をかけていないことを示しています。
ELBを5分間のバーストでゆっくりと立ち上げてみましたが、これは役に立たなかったようです。
RDSとEC2サーバーが機能にプッシュされていないように見えるため、I / Oの問題なのか、それとも他の問題なのか、この問題を次にどこで探すべきか疑問に思っています。次に見るべき提案やアイデアは大歓迎です