
プロセスのメモリ/CPU使用量をリアルタイムで監視したいと思います。似ていますtop
が、1つのプロセスに対してのみ一種の履歴グラフを持つことをお勧めします。
答え1
Linuxではtop
当然履歴グラフはありませんが、1つのプロセスに従うことは実際にはサポートされています。
top -p PID
これはMac OS Xでも使用できますが、構文が異なります。
top -pid PID
答え2
プロセスパス
2020年のアップデート(Linux / procfsのみ)多くの場合、プロセス分析の問題に戻り、最初に以下に説明したソリューションに満足できず、次のように書くことにしました。私のもの。これは純粋なPython CLIパッケージで、いくつかの依存関係(重いMatplotlibを除く)を含み、潜在的にprocfsの多くの指標をプロットすることができ、JSONPathクエリをプロセスツリーに表示し、基本抽出/集計(Ramer-Douglas-Peucker)と移動平均)があります。時間範囲やPIDなどに基づいてフィルタリングします。
pip3 install --user procpath
以下はFirefoxを使った例です。これにより、「firefox」cmdline
(PIDクエリの形式'$..children[?(@.stat.pid == 42)]'
)を使用するすべてのプロセスが1秒あたり120回記録されます。
procpath record -i 1 -r 120 -d ff.sqlite '$..children[?("firefox" in @.cmdline)]'
すべての履歴にわたって単一(または複数)プロセスのRSSおよびCPU使用率をプロットすると、次のようになります。
procpath plot -d ff.sqlite -q cpu -p 123 -f cpu.svg
procpath plot -d ff.sqlite -q rss -p 123 -f rss.svg
チャートは次のとおりです(実際には対話型Pygal SVGです)。
記録
次の住所一種の歴史的チャート。 Pythonpsrecord
パッケージがまさにその役割を果たします。
pip install psrecord # local user install
sudo apt-get install python-matplotlib python-tk # for plotting; or via pip
単一プロセスの場合は次のようになります(中止Ctrl+C)。
psrecord $(pgrep proc-name1) --interval 1 --plot plot1.png
複数のプロセスの場合、次のスクリプトはチャートを同期するのに役立ちます。
#!/bin/bash
psrecord $(pgrep proc-name1) --interval 1 --duration 60 --plot plot1.png &
P1=$!
psrecord $(pgrep proc-name2) --interval 1 --duration 60 --plot plot2.png &
P2=$!
wait $P1 $P2
echo 'Done'
メモリアナライザ
これパックRSS専用のサンプリング(および一部のPython関連オプション)を提供します。プロセスとそのサブプロセスを記録することもできます(参考資料を参照mprof --help
)。
pip install memory_profiler
mprof run /path/to/executable
mprof plot
デフォルトでは、エクスポート可能なTkinterベース(python-tk
必要な場合があります)チャートブラウザがポップアップ表示されます。
グラファイトスタックと統計
これは単純なワンタイムテストでは過剰に見えるかもしれませんが、数日間デバッグする場合は確かに合理的です。便利なオールインワンマシンraintank/graphite-stack
(グラファナの作者)画像とpsutil
そしてstatsd
顧客。procmon.py
実装が提供されます。
$ docker run --rm -p 8080:3000 -p 8125:8125/udp raintank/graphite-stack
その後、他の端末でターゲットプロセスを開始した後:
$ sudo apt-get install python-statsd python-psutil # or via pip
$ python procmon.py -s localhost -f chromium -r 'chromium.*'
その後、http://localhost:8080でGrafanaを開き、として認証し、admin:admin
データソースをhttps://localhostに設定すると、次のチャートを描画できます。
グラファイトスタックと電報
Pythonスクリプトを使用して指標をStatsdに送信する代わりに、telegraf
(およびprocstat
入力プラグイン)を使用して、メトリックをGraphiteに直接送信できます。
最小telegraf
構成は次のとおりです。
[agent]
interval = "1s"
[[outputs.graphite]]
servers = ["localhost:2003"]
prefix = "testprfx"
[[inputs.procstat]]
pid_file = "/path/to/file/with.pid"
次に行を実行しますtelegraf --config minconf.conf
。 Grafana部分は、メトリック名を除いて同じです。
PID統計
pidstat
(パッケージの一部sysstat
)簡単に解析可能な出力を生成できます。これは、プロセスに追加の指標が必要な場合に便利です。たとえば、最も有用な3つのグループ(CPU、メモリ、およびディスク)には、、、、、、、、、、、、、、が%usr
含まれます。説明しました。%system
%guest
%CPU
minflt/s
majflt/s
VSZ
RSS
%MEM
kB_rd/s
kB_wr/s
kB_ccwr/s
関連回答。
答え3
htop
のための素晴らしい選択肢ですtop
。それは...色を持っています!簡単なキーボードショートカット!リストをスクロールするには、矢印キーを使用してください! PIDを残したり記録したりせずにプロセスを終了!複数のプロセスを表示し、すべて終了します!
すべての機能で、マンページには次のボタンをF押すことができます。フォローするプロセス。
本当に、あなたはそれを試す必要がありますhtop
。top
初めて使用してから再起動したことはありませんhtop
。
単一のプロセスを表示します。
htop -p PID
答え4
パーティーに少し遅れましたが、デフォルト値のみを使用してコマンドラインのヒントを共有します。ps
WATCHED_PID=$({ command_to_profile >log.stdout 2>log.stderr & } && echo $!);
while ps -p $WATCHED_PID --no-headers --format "etime pid %cpu %mem rss"; do
sleep 1
done
ラインとして使用しました。ここで、最初の行はコマンドをトリガし、PIDを変数に保存します。その後、psは経過時間、PID、CPU使用率、メモリ比、およびRSSメモリを印刷します。他のフィールドも追加できます。
プロセスが終了すると、ps
コマンドは「成功」を返さずにwhile
ループを終了します。
分析するPIDがすでに実行されている場合は、最初の行を無視してもかまいません。必要なIDを変数に入れます。
次のような出力が得られます。
00:00 7805 0.0 0.0 2784
00:01 7805 99.0 0.8 63876
00:02 7805 99.5 1.3 104532
00:03 7805 100 1.6 129876
00:04 7805 100 2.1 170796
00:05 7805 100 2.9 234984
00:06 7805 100 3.7 297552
00:07 7805 100 4.0 319464
00:08 7805 100 4.2 337680
00:09 7805 100 4.5 358800
00:10 7805 100 4.7 371736
....