2017-11-21 10 views
1

Python 3では、プログラムの実行中にメモリ(RAM)の使用状況を記録する方法はありますか?Python - ログメモリの使用

背景情報私はslurmを使用してhpcクラスタ上でシミュレーションを実行します。ここでは、ジョブを送信する前にメモリを予約する必要があります。私の仕事はたくさんの記憶を必要としていることは分かっていますが、どれくらいのことがわかりません。だから私は、時間の経過とともにメモリを記録するための簡単な解決策があるのだろうかと思っていました。

答えて

1

これは、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列を探します。

+0

これは完璧に動作します。特に、memory_profilerの 'mprof'コマンドは、時間経過に伴うメモリを取得するのに便利です。 – physicsGuy

1

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プログラムでありますあなたのユースケースに応じて、出力を解析します。

+0

あなたの答えをありがとう、もしdamienfrancoisのものでなければ、私はそれを除外したでしょう。 – physicsGuy