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 のシングルトン デザイン パターン
1. HTMLコードコードをコピーコードは次のとおりです。経験値: <span class=...
この記事では、プログレスバーヒストグラムを実現するためのvue+echartsの具体的なコードを参考...
目次序文実装のアイデア実装コード成果を達成する序文これは、テーブルを動的に追加する例です。[追加] ...
目次概要1. jsの位置づけを明確に理解する2. 明確な学習パス3. 自己規律と粘り強さ4. 練習し...
ボタン (input, button) を記述すると、IE では次のようになります。単語数が増えると...
最近、Docker がコンテナの起動時に特定のプロセスを直接実行できるようにする方法を調べていたとこ...
目次序文undefined と null の混同紛らわしい数値の加算と文字列の連結戻り文の改行の問題...
名前タグの名前を指定します。形式 <input type="text" n...
以前、写真が与えられ、その写真スタイルに基づいてフォームを作成するという課題に遭遇しました。しかし、...
目次序文文章プリミティブ型プリミティブ値ラッパーオブジェクト物体コンストラクタ通常機能(関数)プリミ...
今日はあまり使わないHTMLタグ「subタグ」と「supタグ」を紹介します。定義と使用法: <...
この記事の例では、JavaScriptでデジタル時計効果を実装するための具体的なコードを参考までに共...
序文プロジェクトでは中間層としてNodeを使用し、Nodeのデプロイにはdockerを使用します。こ...
antd-mobileをインストールするグローバル輸入 npm をインストール antd-mobil...
MySQL(5.6以下)はjsonを解析します #json 解析関数 DELIMITER $$ `j...