Python 3では、プログラムの実行中にメモリ(RAM)の使用状況を記録する方法はありますか?Python - ログメモリの使用
背景情報私はslurmを使用してhpcクラスタ上でシミュレーションを実行します。ここでは、ジョブを送信する前にメモリを予約する必要があります。私の仕事はたくさんの記憶を必要としていることは分かっていますが、どれくらいのことがわかりません。だから私は、時間の経過とともにメモリを記録するための簡単な解決策があるのだろうかと思っていました。
Python 3では、プログラムの実行中にメモリ(RAM)の使用状況を記録する方法はありますか?Python - ログメモリの使用
背景情報私はslurmを使用してhpcクラスタ上でシミュレーションを実行します。ここでは、ジョブを送信する前にメモリを予約する必要があります。私の仕事はたくさんの記憶を必要としていることは分かっていますが、どれくらいのことがわかりません。だから私は、時間の経過とともにメモリを記録するための簡単な解決策があるのだろうかと思っていました。
これは、memory_profilerパッケージで行うことができます。ただ、関数にデコレータ@profile
を追加すると、次のような出力を取得します:
Line # Mem usage Increment Line Contents
==============================================
3 @profile
4 5.97 MB 0.00 MB def my_func():
5 13.61 MB 7.64 MB a = [1] * (10 ** 6)
6 166.20 MB 152.59 MB b = [2] * (2 * 10 ** 7)
7 13.61 MB -152.59 MB del b
8 13.61 MB 0.00 MB return a
をそれ以外の場合は、それを行うための最も簡単な方法はとても(MaxRSS
列を探してください)sacct -l -j <JobId>
コマンドを使用して、その後SLURMを依頼することですそれ以上の仕事に適応することができます。
また、プログラムの実行中にtop
コマンドを使用すると、メモリ消費量を知ることができます。 RES
列を探します。
subprocess
モジュールを使用できます。あなたには、いくつかのプロセスのメモリ使用量を確認したり、定期的にそれをログに記録する場合は、あなたがpmap
またはいくつかの他のユーティリティを使用することができます
import subprocess
result = subprocess.check_output(['bash','-c', 'free -m'])
free_memory = result.split('\n')[1].split()[3]
# print free_memory
# 300
- ここでbashコマンドのサンプル出力free
$ free -m
total used free shared buffers cached
Mem: 7979 7678 300 0 109 4628
-/+ buffers/cache: 2941 5038
Swap: 2046 360 1686
Pythonプログラムでありますあなたのユースケースに応じて、出力を解析します。
あなたの答えをありがとう、もしdamienfrancoisのものでなければ、私はそれを除外したでしょう。 – physicsGuy
これは完璧に動作します。特に、memory_profilerの 'mprof'コマンドは、時間経過に伴うメモリを取得するのに便利です。 – physicsGuy