前提: 皆さん、こんにちは。アプリケーションのボトルネックがどこにあるのかを確認するために、Tomcat サーバーのストレス テストを行う必要があります。ただし、テスト プロセス中に、CPU が jvm リソースによって占有されていません。 50% に達しました。mysql はダウンしました。
次に、アプリケーション サービスのボトルネックを調べたいと思います。同時実行性が高いと、CPU が高くなりすぎます。これを実現するにはどうすればよいですか?
私が考える方法は、コードレベルで複数のスレッドを作成し、データベースの読み書きを行わず、CPU を稼働させることです。出来ますか? ?
ありがとう~~
一般的に言えば、Web アプリケーションのボトルネックはデータベースです。アプリケーション サーバー (Tomcat であろうとその他であろうと) が過負荷になっている場合、一般的にはサーバーを追加することで解決できます。
コストを削減し、アプリケーションのボトルネックがどこにあるのかを特定したい場合は、次のようなストレス テストのコツがあります:
データベースが簡単にダウンしないように、mysql ストレージ エンジンを
blackhole
に変更します。CPU 使用率が高すぎる場合は、データベース接続プールを使用してリンクの作成が制限されます。データベースへのアクセスを減らすために、まれに更新されるデータを Redis などのキャッシュに配置して、データを取得するたびにデータベースにアクセスする必要をなくすことができます。
単純なストレス テストの場合は、Apache サーバーの ab を使用します。複雑なテストの場合は、JMeter を使用すると、問題の原因を簡単に分析して見つけることができます。
これはデータベース操作に問題があるようです。たとえば、SQL を最適化するか、データベース操作を減らすためにキャッシュを追加する必要があります。 Tomcat とは何の関係もありません。
MySQL がダウンしている場合は、SQL が最適化されているかどうか、SQL が遅いかどうか、テーブル全体のスキャンが行われているかどうかを確認する必要があります。インデックスが効率的です。さらに、データベースの同時実行性を制御するために接続プールを使用しましたか? MySQL でサポートされる同時実行性は CPU コアの数に関連しています。一般に、SQL が遅いとデータベースが簡単にダウンしてしまいます
一般的なシステムのボトルネックは、基本的にサーバーの数を増やし、リクエストを最適化することで解決できます。 より大きなボトルネックは基本的にデータベース リンクにありますが、リクエストの同時実行ボトルネックをテストしないと接続できません。テストのためにデータベースにアクセスすることは基本的に効果がなく、実際のプロジェクトには役に立ちません。得られたボトルネックは、実際のボトルネックではありません
。