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 を例に挙げると、私がかつて取り組んだプロジェクトの構成は次のようになります。 これはもともとローカルテスト用の設定計画に過ぎませんでした。不注意で、オンラインになった後に修正するのを忘れてしまいました。複数人がアクセスすると、待機接続タイムアウトが発生します。プロジェクトの実際の状況に応じて、適切な設定データを設定する必要があります。 応答が遅い原因は、無理なプロジェクト設計にある可能性もありますが、ここでは詳しく説明しません。
4. 仮想マシン分析 top コマンドを使用して、仮想マシンのメモリ使用量を表示します。仮想マシンが占有するメモリの割合は大きくないにもかかわらず、明らかな上限があることがわかる場合があります。仮想マシンの構成を確認する必要があります。 解決策(Tomcat を例に挙げます): 具体的な値は実際の状況によって異なります。 5. データベース分析 (MySql) データベースを分析する際には、考慮すべき点が数多くあります。私が遭遇した状況をいくつか挙げてみます。 a. 最大接続数
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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: 一般的なSQL削除ステートメントの原則の違いを理解するだけです
>>: JavaScript のシングルトン デザイン パターン
これはウェブサイトのユーザビリティに関する記事です。著者は自身の経験に基づいて、ウェブサイトのデザイ...
この記事は主に、初心者に XHTML の基本的な知識と、XHTML と HTML の違いを理解しても...
1. pipとは何かpip は、Python パッケージの検索、ダウンロード、インストール、アンイ...
この記事では、MySQL データベースでよく使用される SQL ステートメントを例を使用して説明しま...
序文ブロガーが使用しているサーバーは Alibaba Cloud から購入したものです。実際、Ali...
MySQL データベースには増分バックアップ メカニズムはありませんが、マスター データベース内のす...
原因は、プロセスが特定の時点でシステム制限を超える数のファイルと通信リンクを開くことです。 システム...
聞く: CSS を使用してハイパーリンクのスタイルを設定しましたが、ホバーしても機能しません。なぜこ...
MySQL は比較的使いやすいリレーショナル データベースです。今日は、win10 システムを再イ...
導入:現在、プログラム攻撃を防ぐために、ユーザーがログインまたは登録するときに多くの動的検証テクノロ...
目次1.vモデル2. プロパティとイベントのバインディング3. フォーム要素のバインディング3.1 ...
通常、フィールド値を更新するには次の SQL ステートメントを使用します。 mytable を更新し...
目次1. 問題の説明: 2. Jenkins設定のトラブルシューティング3. コードログのエンコード...
目次1. MySQLの関数の説明2. 単行関数の分類3. キャラクター機能4. 数学関数5. 日付と...
コードをコピーコードは次のとおりです。 <!DOCTYPE HTML PUBLIC "...