インターネット上には Linux サーバーを監視するためのツール、コンポーネント、プログラムが多数ありますが、サーバー上では同時に多数のプロセスが実行されます。特にパフォーマンス テストを行う場合、複数のサービスがサーバー上に展開されることがあります。サーバー全体の CPU とメモリのみを監視すると、サービスにパフォーマンス上の問題がある場合、効果的かつ正確にその問題を特定できません (もちろん、他のツールを使用しても実現できます)。したがって、特定のプロセスのみを監視する必要があります。要件は明確だったので、パフォーマンス監視スクリプトの作成を開始しました。 1. 全体的な考え方1. 監視の開始と停止、監視結果を確認したいときにいつでも便利に監視を開始および停止し、監視結果を確認できるように、Flask でサービスを開始します。get リクエストを送信することで、いつでも監視を開始および停止し、監視結果を確認できます。 2. 設定ファイルconfig.py IP = '127.0.0.1' ポート = '5555' LEVEL = 'INFO' # ログレベル BACKUP_COUNT = 9 # ログバックアップカウンタ LOG_PATH = 'logs' # ログパス INTERVAL = 1 # 間隔、コマンド間隔を実行します。 SLEEPTIME = 3 # 間隔、モニターを停止する場合、条件を満たす場合にモニターを開始するためにポーリングします。 ERROR_TIMES = 5 # 回、実行中のコマンドの数。等しい場合、モニターは自動的に停止します。 IS_JVM_ALERT = True # Full GC の頻度が高すぎる場合に警告するかどうか。 IS_MONITOR_SYSTEM = True # システムの CPU とメモリを監視するかどうか。 IS_MEM_ALERT = True # メモリが不足している場合に警告するかどうか。電子メールを送信して警告します。 MIN_MEM = 2 # Minxium メモリ、uint: G # 0: キャッシュをクリアしない、1: ページ キャッシュをクリアする、2: dentry および inode キャッシュをクリアする、3: 1 と 2 を含める。 # エコー 1 >/proc/sys/vm/drop_caches エコー = 0 SMTP_SERVER = 'smtp.sina.com' # SMTPサーバー SENDER_NAME = '张三' # 送信者名 SENDER_EMAIL = '[email protected]' # 送信者のメールアドレス PASSWORD = 'UjBWYVJFZE9RbFpIV1QwOVBUMDlQUT09' # 電子メールのパスワード、base64 エンコード。 RECEIVER_NAME = 'baidu_all' # 受信者名 RECEIVER_EMAIL = ['[email protected]', '[email protected]'] # 受信者のメールアドレス DISK = 'device1' # アプリケーションが実行されるディスク START_TIME = 'startTime.txt' # 監視開始時刻を保存します。 FGC_TIMES = 'FullGC.txt' # すべての FullGC 時間を保存します。 #html HTML = '<html><body>{}</body><html>' エラー = '<p style="color:red">{}</p>' ヘッダー = '<div id="header"><h2 align="center">パフォーマンス モニター (pid={})</h2></div>' 分析 = '<div id="container" style="width:730px; margin:0 auto">{}</div>' IP とポート: サービスが有効になっているサーバーの IP とポート。監視対象サービスと同じサーバー上にある必要があります。 3. インターフェースとサービスサーバー.py サーバー = Flask(__name__) パーモン = PerMon() # マルチスレッドを有効にする t = [threading.Thread(target=permon.write_cpu_mem, args=()), スレッド化.Thread(ターゲット=permon.write_io、引数=())] iが範囲内(len(t))の場合: t[i].開始() # 監視を開始# http://127.0.0.1:5555/runMonitor?isRun=1&type=pid&num=23121&totalTime=3600 @server.route('/runMonitor', メソッド=['get']) runMonitor() を定義します:...... # 監視結果のグラフを描画します# http://127.0.0.1:5555/plotMonitor?type=pid&num=23121 @server.route('/plotMonitor', メソッド=['get']) def plotMonitor():....... server.run(port=cfg.PORT, debug=True, host=cfg.IP) # サービスを開始します ブラウザのアドレスバーに対応する URL を入力すると、監視を開始および停止したり、監視結果を表示したりできます。 URLパラメータの受け渡し: 1. 監視を開始する http://127.0.0.1:5555/runMonitor?isRun=1&type=pid&num=23121&totalTime=3600 2. 監視結果を表示する http://127.0.0.1: 4. 監視パフォーマンスモニター.py top コマンドを使用して CPU とメモリを監視し、jstat コマンドを使用して JVM メモリ (Java アプリケーションのみ) を監視し、iotop コマンドを使用してディスクの読み取りと書き込みのプロセスを監視し、iostat コマンドを使用してディスク IO を監視し、netstat コマンドを使用してポートに基づいてプロセスを確認し、ps コマンドを使用してサービスの起動時間を表示します。したがって、サーバーは上記のコマンドをサポートしている必要があります。サポートしていない場合は、インストールしてください。 注: プロセスは複数のスレッドを開始できるため、プロセスの IO を表示しても IO は表示されません。プロセスによって開始されたスレッドの IO は表示できますが、IO は表示されますが、スレッドは常に変化しています。そのため、指定されたプロセスの IO の監視は現在サポートされていません。 5. 監視結果を表示する描画パフォーマンス.py 1. CPU グラフ、メモリと JVM グラフ、IO グラフ、ハンドル数グラフをそれぞれ描画します。 監視結果は次のとおりです。 6. 拡張関数extern.pyには2つの関数がある 1. ポート転送プロセス 試す: 結果 = os.popen(f'netstat -nlp|grep {port} |tr -s " "').readlines() res = [line.strip() 結果の行の場合、行内に str(port) があるかどうか] p = res[0].split(' ') pp = p[3].split(':')[-1] str(port) == ppの場合: pid = p[-1].split('/')[0] 例外を err として除く: ロガー.ロガー.エラー(err) 2. 監視結果を含むログを見つける 全体的なアイデア: (1)入力された開始時刻と終了時刻に基づいて、この期間を含むすべてのログファイルを検索します。 補充する 1. 最新の監視開始時刻を簡単に確認できるように、各監視開始時刻が startTime.txt ファイルに書き込まれます。 2. Java アプリケーションで発生する可能性のある問題のトラブルシューティングを容易にするために、各 Full GC の時間を FullGC.txt ファイルに書き込みます。 プロジェクトアドレス: https://github.com/leeyoshinari/performance_monitor 要約する 上記は、編集者が紹介した Python ベースの Linux システム指定のプロセス パフォーマンス監視です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: Vue でポップアップ ウィンドウをクリックしたときにクリック イベントを自動的にトリガーするソリューション (シミュレーション シナリオ)
仮想化1. 環境セントオス7.3 selinuxとファイアウォールを無効にする2. 仮想化環境の構成...
MacにMySQLデータベースをインストールし、環境変数を設定する手順を参考までに記録します。具体的...
導入以前、ある問題に気づきました。学習ビデオを視聴しているとき、動きが遅すぎる、先生が黒板に書くのに...
最近仕事でnginxの設定を変更する必要が頻繁にあり、nginxでrewriteを使用する方法を学び...
デフォルトでは、Flash は常にページのトップレベルに表示されます。つまり、ページに DHTML ...
この記事では、虫眼鏡効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。...
1: MySqlをダウンロードする公式サイトのダウンロードアドレス: https://dev.mys...
MySQL データをエクスポートする目的は、データベースのバックアップ、テーブル構造のエクスポート、...
プロジェクトシナリオ: Dark Horse Vueプロジェクト管理の実践、製品分類の取得、拡張バー...
目次1. DHCP サービス (動的ホスト構成プロトコル) 1. 背景2. 概要3. 利点4.DHC...
HTMLはヘッドとボディの2つの部分で構成されています** ヘッド内のタグはヘッドタグです** タイ...
コンテナログを表示するまず、 docker run -it --rm -d -p 80:80 ngi...
この記事では、Vueカウンターの簡単な実装コードを例として紹介します。具体的な内容は以下のとおりです...
Linux システム管理者にとって、サービスがポートに正しくバインドされているか、またはポートをリッ...
序文デモでは古いバージョンのブラウザのグラデーションが実装されています[IE9-]。 IE9 より前...