プロセスパス

プロセスパス

プロセスのメモリ/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です)。

RSS CPU

記録

次の住所一種の歴史的チャート。 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'

チャートは次のとおりです。 psレコードの例

メモリアナライザ

これパック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%CPUminflt/smajflt/sVSZRSS%MEMkB_rd/skB_wr/skB_ccwr/s関連回答

答え3

htopのための素晴らしい選択肢ですtop。それは...色を持っています!簡単なキーボードショートカット!リストをスクロールするには、矢印キーを使用してください! PIDを残したり記録したりせずにプロセスを終了!複数のプロセスを表示し、すべて終了します!

すべての機能で、マンページには次のボタンをF押すことができます。フォローするプロセス。

本当に、あなたはそれを試す必要がありますhtoptop初めて使用してから再起動したことはありません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
  ....

関連情報