在某些程序运行时,python 3中有没有办法记录内存(ram)的使用情况?
一些背景信息。我使用slurm在hpc集群上运行模拟,在提交作业之前我必须保留一些内存。我知道我的工作需要大量的记忆,但我不确定多少。所以我想知道是否有一个简单的解决方案来记录内存。
答案 0 :(得分:3)
您可以使用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
否则,最简单的方法是随后使用sacct -l -j <JobId>
命令询问Slurm(查找MaxRSS
列),以便您可以适应更多的工作。
此外,您可以在运行程序时使用top
命令来了解其内存消耗情况。查找RES
列。
答案 1 :(得分:1)
您可以使用subprocess
模块。以下是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程序 -
import subprocess
result = subprocess.check_output(['bash','-c', 'free -m'])
free_memory = result.split('\n')[1].split()[3]
# print free_memory
# 300
如果要检查某个进程的内存使用情况或定期记录,可以根据用例使用pmap
或其他实用程序,然后解析输出。