Python - 记录内存使用情况

时间:2017-11-21 10:35:09

标签: python slurm

在某些程序运行时,python 3中有没有办法记录内存(ram)的使用情况?

一些背景信息。我使用slurm在hpc集群上运行模拟,在提交作业之前我必须保留一些内存。我知道我的工作需要大量的记忆,但我不确定多少。所以我想知道是否有一个简单的解决方案来记录内存。

2 个答案:

答案 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或其他实用程序,然后解析输出。