プロセスのメモリ使用量を監視し、このデータをログに記録したい。そのようなツールは存在しますか?
私は これを正確に行うスクリプト と書きました。基本的に、特定のプロセスのプロファイルを作成するために、特定の間隔でps
をサンプリングします。プロセスは、監視ツール自体によって起動することも、独立したプロセス(pidまたはコマンドパターンで指定)にすることもできます。
sar
( System Activity Reporter ) sysstat パッケージのパッケージは、このような場合に便利です。
別の方法は、履歴データと組み合わせて監視することです。 Munin、pnp4nagios、rrdtools、...
前述のsarに加えて、 atop をお勧めします。後で閲覧できるバイナリログが保存され、メモリ以外にも多くの情報が保存されます。
Valgrind を試すことができます。
Valgrindは、動的分析ツールを構築するための計測フレームワークです。多くのメモリ管理とスレッド化のバグを自動的に検出し、プログラムを詳細にプロファイリングできるValgrindツールがあります。 Valgrindを使用して新しいツールを構築することもできます。
Valgrindディストリビューションには現在、6つの本番品質のツールが含まれています:メモリエラー検出器、2つのスレッドエラー検出器、キャッシュおよび分岐予測プロファイラー、呼び出しグラフ生成キャッシュとブランチ予測プロファイラー、およびヒーププロファイラー。
私はSridharの単純な答えが好きですが、彼を試す前に自分で答えました。
_import json, psutil, datetime, time
with open('log.txt', 'w') as f:
while True:
json.dump((datetime.datetime.now().isoformat(),
psutil.Process(7274).memory_info()._asdict()), f)
f.write('\n')
f.flush()
time.sleep(1)
_
基本的に、構造化された出力が必要な場合にのみ役立ちます。必要に応じて7274を変更します。また、Python 3.5。何かが壊れた_asdict()
なので、Python 2。
出力ファイルは次のようになります。
_["2019-03-19T11:21:53.784670", {"rss": 220389376, "vms": 538984448, "shared": 15724544, "text": 303104, "lib": 0, "data": 221364224, "dirty": 0}]
["2019-03-19T11:21:54.786136", {"rss": 220438528, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:55.787555", {"rss": 220495872, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:56.788754", {"rss": 220528640, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
_