インターネット上には 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 でポップアップ ウィンドウをクリックしたときにクリック イベントを自動的にトリガーするソリューション (シミュレーション シナリオ)
もちろん、ページ パフォーマンスの最適化に関する個人的な経験も含まれています。ここでいくつかの点につ...
結果:実装コードhtml <ul class="スライド"> <...
リンク A のセマンティクス、ライティング スタイル、およびベスト プラクティス。私は JavaEy...
最近 redis を使っていて、とても便利だと感じているのですが、インメモリ データベースを選択する...
この記事では、VMware 12でのUbuntu 16.04のインストールチュートリアルを参考までに...
目次関連する依存関係のインストールドッカーDockerでJenkinsをインストールするDocker...
目次実際の戦闘プロセスまずは主なコマンドと詳細を一つずつ説明しましょう起動が成功したかどうかを確認す...
1.VirtualBoxソフトウェアをダウンロードしてインストールするまず、VirtualBox の...
いつインストールするかprotoc コマンドを使用しても Protoc が見つからない場合は、インス...
レプリケーションとは、マスター データベースの DDL および DML 操作をバイナリ ログを介して...
目次チュートリアルシリーズ1. SQL言語の紹介と仕様2. データベース操作1. ライブラリを作成す...
MySQLでは、2つ以上のベーステーブルにビューを作成します。学生テーブルとstu_infoテーブル...
目次前面に書かれたWC とは何でしょうか?現在の欠陥1. コンポーネント内部イベントのコールバック2...
jQueryを使用してフォーム検証を実装します。参考までに、具体的な内容は次のとおりです。登録.ht...
この axios パッケージは、vue3 デモで使用されます。便宜上、element-plus は ...