Tomcat が理由もなくひどいパフォーマンスをしています

Tomcat が理由もなくひどいパフォーマンスをしています

私たちは、8 コア プロセッサ、7 GB RAM の Amazon EC2 サーバー上の Tomcat 6 でゲーム アプリケーション .WAR を実行しています。アプリケーションは、Amazon RDS でホストされている MySQL データベースを使用します。

この Facebook アプリケーションは、わずか 20 ~ 30 人のユーザーがプレイしているときでも、アクセスに非常に時間がかかります。1 ~ 2 人のユーザーの場合とは大きな違いです。.WAR 全体は約 4 MB で、すべての静的コンテンツは他の場所でホストされています。

サーバーの RAM が不足しそうになったことはありません。CPU 使用率が 13.5 ~ 14% を超えることはありませんでした。約 500 人のユーザーがいる場合でも、すべてが停止するほど遅くなります。スレッド数またはスレッドプールは、最大限に達することはありません。maxthreads を上げましたが、目立った違いはありませんでした。

私の理論では、Tomcat は 1 つのプロセッサ コアしか使用できないため、アクティビティの急増時に CPU 使用率が 13 ~ 14% で安定していたにもかかわらず、Tomcat が遅くなって停止した理由を説明できます。
しかし、なぜ 1 つの CPU コアしか使用しないのか理解に苦しみます。server.xml にはプロセッサ キャップがありません。アプリには複数のサーブレット (4 つまたは 5 つ) が含まれています。Java コードには SingleThreadModel に関する記述がありません。

アプリケーションの実行速度が極端に遅い原因は何でしょうか? アプリケーションに 1 ~ 5 人しかいない場合は問題なく動作します。 20 ~ 30 人になると、ほとんど連絡が取れなくなります。

答え1

これはアプリケーション設計の欠陥である可能性があります。同じ動作をするアプリケーションが 1 つあります。そのコードの大部分は同期化されているため、CPU をいくつ割り当てても、実質的には 1 つのスレッドで実行されます。この状況では、同じアプリケーションの複数のインスタンスを実行して、それらの間で負荷を分散する以外にできることはほとんどありません。

関連情報