slurm如何确定作业的内存使用情况

时间:2017-08-04 17:14:24

标签: slurm

最近,用户在我们的群集上运行了一个交互式作业。我们使用slurm作为工作负载管理器。他通过以下方式获得了分配:

 salloc --cpus-per-task=48 --time=14-0 --partition=himem

这会在我们的群集上请求整个高内存(1.5TB)计算机。他跑完了他的工作。当它运行时,在他的屏幕上他收到了错误消息(或类似的东西):

salloc: Error memory limit exceeded

我登录了节点,使用top,他的工作仅在RES中占用310GB。但是在slurmd.log中有一系列错误(跨越8小时!),如下所示:

[2017-08-03T23:21:55.200] [398692.4294967295] Step 398692.4294967295 exceeded memory limit (1588997632 > 1587511296), being killed

问题:为什么top认为他使用310GB而slurm认为他使用的是1.58TB?

1 个答案:

答案 0 :(得分:1)

要回答这个问题,Slurm使用/proc/<pid>/stat来获取内存值。在你的情况下,正如@Dmitri Chubarov所建议的那样,你无法见证被Slurm杀害的有罪过程。

另一种可能性是你遇到了一个Slurm错误,最近在版本17.2.7中进行了修正。从更改日志中:

  

- 增加缓冲区以处理long / proc // stat输出,以便Slurm可以读取正确的RSS值并对使用更多的作业采取措施   记忆而不是要求。

Slurm反复尝试终止进程的事实(你在日志中提到了几次出现的条目)表明该机器在RAM上运行不足并且slurmd在尝试终止进程时遇到问题。我建议你激活cgroups进行任务控制;它更加强大。