Tomcat サーバーの応答が遅い場合の解決策

Tomcat サーバーの応答が遅い場合の解決策

1. 分析的思考

1. 機械自身の理由を排除する

2. サーバーパフォーマンス分析

3. プロジェクト自体の分析(詳細ではない)

4. 仮想マシン分析

5. データベース分析

2. 詳細な分析方法

1. 機械自身の理由を排除する

ウェブマスター ツールを使用して、Web サイトの速度をテストできます。

2. サーバーパフォーマンス分析

top コマンドを使用して、サーバーのリソース使用状況を表示します。主に CPU とメモリの使用状況を分析します (top コマンドは Linux でよく使用されるパフォーマンス分析ツールで、システム内の各プロセスのリソース使用状況をリアルタイムで表示できます。プロセス リストはデフォルトで 5 秒ごとに更新されるため、Windows タスク マネージャーに似ています)。

3 行目は CPU 使用率を示しており、詳細な意味は次のとおりです。

us---ユーザー空間が占有する CPU の割合、sy---カーネル空間が占有する CPU の割合、ni---優先順位が変更されたプロセスが占有する CPU の割合、id---アイドル CPU の割合、wa---IO 待機が占有する CPU の割合、hi---ハード割り込み (ハードウェア IRQ) が占有する CPU の割合、si---ソフト割り込み (ソフトウェア割り込み) が占有する CPU の割合、st---スチール時間、ホスト上の他の仮想マシンで実行されているタスクに割り当てられた実際の CPU 時間 (通常は仮想マシン OS のみ)。

4行目は現在のメモリ状況を示しています。サーバーメモリの合計は8054352kで、2879468kが使用済み、5174884kが残り、265728kがバッファリングされています。

私の個人的な理解では、us パーセンテージが 50% 未満の場合は、サーバー構成の問題を考慮する必要はありません。サーバーの us パーセンテージが長期間にわたって 70% を超える場合は、サーバーのハードウェア構成を強化することを検討できます。また、サーバーのネットワーク状態も確認する必要があります。基本的には、大きなファイルをダウンロードすることでネットワーク状態を判断できます。

3. プロジェクト自体の分析

JDBC 接続プールを使用する場合は、接続プールの構成を分析する必要があります (スレッド プールの最大数、解放時間などを分析します)。

ここで、C3P0 を例に挙げると、私がかつて取り組んだプロジェクトの構成は次のようになります。

これはもともとローカルテスト用の設定計画に過ぎませんでした。不注意で、オンラインになった後に修正するのを忘れてしまいました。複数人がアクセスすると、待機接続タイムアウトが発生します。プロジェクトの実際の状況に応じて、適切な設定データを設定する必要があります。

応答が遅い原因は、無理なプロジェクト設計にある可能性もありますが、ここでは詳しく説明しません。

checkoutTimeout---接続プールが使い果たされると、クライアントは getConnection() を呼び出した後に新しい接続を待機します。タイムアウト後、SQLException がスローされます。0 に設定すると、無期限に待機します。単位はミリ秒です。デフォルト: 0
minPoolSize --- 接続プールに保持される接続の最小数。デフォルトは 3 です。
maxPoolSize---接続プールに保持される接続の最大数。デフォルト値: 15
maxIdleTime---最大アイドル時間。設定された時間内に接続が使用されない場合は、接続は破棄されます。 0 の場合は破棄されません。デフォルト値: 0
maxIdleTimeExcessConnections---デフォルト: 0 単位 この設定は、主に接続プールの負荷を軽減するために使用されます。たとえば、接続プール内の接続数は、データ アクセスのピークにより大量のデータ接続を作成する可能性がありますが、その後の期間に必要なデータベース接続の数は非常に少ないです。このとき、接続プールはそれほど多くの接続を維持する必要はありません。したがって、負荷を軽減するために、一部の接続を切断して破棄する必要があります。maxIdleTime 未満である必要があります。設定が 0 でない場合、接続プール内の接続数は minPoolSize に維持されます。 0 の場合、acquireIncrement は処理されません。これは、接続プールが使い果たされたときに c3p0 が一度に取得する接続の数です。デフォルト値: 3

4. 仮想マシン分析

top コマンドを使用して、仮想マシンのメモリ使用量を表示します。仮想マシンが占有するメモリの割合は大きくないにもかかわらず、明らかな上限があることがわかる場合があります。仮想マシンの構成を確認する必要があります。

解決策(Tomcat を例に挙げます):

具体的な値は実際の状況によって異なります。

5. データベース分析 (MySql)

データベースを分析する際には、考慮すべき点が数多くあります。私が遭遇した状況をいくつか挙げてみます。

a. 最大接続数

'%max_connections%' のような変数を表示します。最大接続数を表示します。'Threads%' のようなステータスを表示します。現在の接続使用状況を表示します。

Threads_connected --- 開いている接続の数

Threads_running---この値はアクティブな接続の数を示し、通常は接続値よりもはるかに低くなります。

最大接続数の値が小さすぎる場合は、実際の状況に応じて変更できます。通常は 1000 に変更できます。設定方法は 2 つあります。

1. 一時的な設定であり、サービスを再起動すると無効になります

2. データベース構成ファイルを変更する

/etc/my.cnf ファイルの [mysqld] の下に次の行を追加または削除します: max_connections = 1000

b. タイムアウト制御

MySQL には「wait_timeout」というプロパティがあり、デフォルト値は 28800 秒 (8 時間) です。wait_timeout の値は設定できますが、最大値は 2147483 までで、それより大きい値にはなりません。これは約 24.85 日であり、show global variables like 'wait_timeout'; コマンドを通じて確認できます。

wait_timeout の意味は、接続が 8 時間以上アイドル状態の場合、Mysql は自動的に接続を切断します。簡単に言えば、接続が 8 時間非アクティブの場合、自動的に切断されます。 dbcp は接続が有効かどうかをチェックしないため、データ操作を実行するために使用すると例外が発生します。

問題がタイムアウト制御によって発生した場合、wait_timeout 値を変更することは推奨されません。データベース接続 URL の後に「&autoReconnect=true&failOverReadOnly=false」を追加することで、問題を解決できます。

c. DNS逆引き解決

MySQL データベースは、ネットワーク接続を受信すると、まず相手の IP アドレスを取得し、次に IP アドレスに対して逆 DNS 解決を実行して、IP アドレスに対応するホスト名を取得します。ホスト名を使用して、権限システムで権限を決定します。逆 DNS 解決には時間がかかり、ユーザーにとっては遅いように見える場合があります。場合によっては、逆解析によって解決されたホスト名がこの IP アドレスを指しておらず、接続が成功しないことがあります。 構成ファイルで、my.cnf の [mysqld] セクションに次の行を追加することで、MySQL による逆 DNS 解決を無効にすることができます。

skip-name-resolve (Windows と Linux で同じ)

d. テーブルキャッシュ

'open%tables%' のようなグローバル ステータスを表示します。開いているテーブルの数を表示します。

open_tables: 現在キャッシュ内にある開いているテーブルの数です。

opened_tables: MySQL の起動後に開かれたテーブルの数です。

Opened_tables 値が非常に大きい場合、キャッシュが小さすぎるため、テーブルが頻繁に開かれることを意味します。現在の table_open_cache 設定を確認できます。

'table_open_cache'のような変数を表示し、キャッシュの上限を表示します。

table_open_cache の値を設定する方法は 2 つあります (サーバーのメモリが約 4G の場合は、2048 に設定することをお勧めします)。

1. 一時的な設定であり、サービスを再起動すると無効になります

グローバル table_open_cache=2048 を設定します。

2. データベース構成ファイルを変更する

/etc/my.cnf ファイルの [mysqld] の下に次の行を追加または削除します: table_open_cache = 2048

e. スロークエリログ

スロークエリログを記録する目的は、サーバーの応答が遅い原因が特定のステートメントの実行が遅いことにあるかどうかを確認することです。

遅いクエリについては詳しく説明しません。オンラインでたくさん見つけることができます。

しかし、結局のところ、実際のプロジェクト分析によると、これらに問題はありません。直接満杯になるのは MongoDb の CPU です。コメントアウトするだけです。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Centos8.2 クラウド サーバー環境に Tomcat8.5 をインストールするための詳細なチュートリアル
  • Alibaba Cloud Server Tomcatにアクセスできません
  • IDEA 2020 で Tomcat サーバーを構成するための詳細な手順
  • Linux クラウド サーバーに JDK と Tomcat をインストールするための詳細な手順 (推奨)
  • Tomcat サーバー入門の超詳細なチュートリアル

<<:  一般的なSQL削除ステートメントの原則の違いを理解するだけです

>>:  JavaScript のシングルトン デザイン パターン

推薦する

Spark SQL の 4 つの一般的なデータ ソースの詳細な説明

汎用ロード/書き込みメソッドオプションを手動で指定するSpark SQL の DataFrame イ...

MySQL 8.0.13 のインストールと設定のグラフィックチュートリアル

Msyqlデータベースのインストール、参考までに具体的な内容は次のとおりです。 ①ブラウザでhttp...

MySQL の例 DTID マスタースレーブ原理の分析

目次1. GTIDの基本概念2. GTIDの利点3. GTIDの仕組み4. 従来のレプリケーションに...

vueはEle.me UIを使用してteambitionのフィルタリング機能を模倣します

目次問題の説明一般的な機能効果は次のとおりです。思考分析完全なコード要約する問題の説明Teambit...

Vue での props の使い方の紹介

序文: Vue では、props を使用して、もともと分離されていたコンポーネントを直列に接続するこ...

Zabbix による VMware Exsi ホストの監視のグラフィカルな手順

1. 仮想化 vcenter に入り、ブラウザでログインし (クライアントは設定する場所を見つけませ...

数千万データを持つMySQLテーブルを最適化する実践記録

序文まずここで説明させてください。インターネット上では、Alibaba では 500 万のデータを異...

divとspanの違いと使い方

目次1. DIVとSPANの違いと特徴2. スパンタグの概要3. 拡大と改善4. 凡例の効果の実証例...

ウィンドウ環境設定Mysql 5.7.21 windowx64.zip無料インストール版チュートリアル詳細説明

1. 公式サイトのmysqlダウンロードページからmysql-5.7.21-windowx64.zi...

React Hooksを使用する際のよくある落とし穴

React Hooks は React 16.8 で導入された新しい機能で、クラスを使用せずに状態や...

グリッド共通レイアウトの実装

両側に隙間なし、各列間に隙間あり 幅: 100%; 表示: グリッド; グリッドテンプレート列: r...

XHTML 入門チュートリアル: よく使われる XHTML タグ

<br />記事と同様に、Web ページにも明確な段落と重要度の異なるタイトルが必要です...

非常に実用的なMySQL関数の包括的な概要、詳細な例の分析チュートリアル

目次1. MySQLの関数の説明2. 単行関数の分類3. キャラクター機能4. 数学関数5. 日付と...

AngularJSにおける括弧の役割の詳細な説明

1. 括弧の役割1.1 角括弧 [ ]属性名が角括弧で囲まれている場合、右側には式の値が割り当てられ...

javascript 入力画像のアップロードとプレビュー、FileReader プレビュー画像

FileReader は、フロントエンドのファイル処理、特に画像処理にとって重要な API です。画...