【发布时间】:2018-01-12 17:10:46
【问题描述】:
最近一个用户在我们的集群上运行一个交互式作业。我们使用 slurm 作为工作负载管理器。他通过以下方式获得分配:
salloc --cpus-per-task=48 --time=14-0 --partition=himem
这需要我们集群上的整个高内存 (1.5TB) 机器。他跑了他的工作。当它运行时,在他的屏幕上他收到了错误消息(或类似的东西):
salloc: Error memory limit exceeded
我登录到节点,使用top,他的工作只占用了 310GB 的 RES。然而,在 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?
【问题讨论】:
-
因为 slurm 据报道杀死了一个进程,可能在某个时间点确实有一个用户生成了一个使用 1.5TB 的进程,但是当你登录时它已经消失了。如果你碰巧有一个 RedHat 或衍生系统,你可能有 sadc 运行并每隔 10 分钟收集一次内存使用数据来检查这个假设。
-
我觉得不是这样,上面
Step 398692.报的pid和310GB进程的pid匹配。我正在观看top和 slurm 日志,而它正在生成所有Step 398692.4294967295 exceeded memory limit错误。当它产生这些错误时,根本没有任何进程拥有这么多内存。
标签: slurm