2017-11-21 10 views
1

일부 프로그램이 실행되는 동안 파이썬 3에서 메모리 (램) 사용을 기록하는 방법이 있습니까?파이썬 - 로그 메모리 사용량

일부 배경 정보 나는 slurm을 사용하는 hpc 클러스터에서 시뮬레이션을 실행하는데, 여기서 job을 보내기 전에 메모리를 예약해야합니다. 나는 직업이 많은 기억을 필요로한다는 것을 알고 있지만, 나는 얼마나 많이 확신하지 못한다. 그래서 시간이 지남에 따라 메모리 로깅을위한 간단한 솔루션이 있는지 궁금 해서요.

답변

1

memory_profiler 패키지로이 작업을 수행 할 수 있습니다. 그렇지 않으면

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을 요청하는 것입니다 할 수있는 가장 쉬운 방법 : 그냥 함수에 장식 @profile를 추가, 당신은이 같은 출력을 얻을 것이다 당신은 더 많은 직업에 적응할 수 있습니다.

또한 프로그램을 실행하는 동안 top 명령을 사용하여 메모리 사용량을 알 수 있습니다. RES 열을 찾으십시오.

+0

완벽하게 작동합니다. 특히 memory_profiler의 'mprof'명령은 시간 경과에 따른 메모리를 얻는 데 유용합니다. – physicsGuy

1

subprocess 모듈을 사용할 수 있습니다. 당신이 어떤 프로세스의 메모리 사용량을 확인하거나 주기적으로 기록하려면

import subprocess 
result = subprocess.check_output(['bash','-c', 'free -m']) 
free_memory = result.split('\n')[1].split()[3] 
# print free_memory 
# 300 

는, 당신은 pmap를 사용하거나 다른 유틸리티 - 여기 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 

파이썬 프로그램의 출력 결과의 예입니다 유스 케이스에 따라 다르며 출력을 파싱한다.

+0

답장을 보내 주셔서 감사합니다. damienfrancois 님의 답변이 아닌 경우 예외였습니다. – physicsGuy