如何限制Slurm指定分区中用户运行作业的总内存使用量?
Slurm分区用户作业内存限制问题解答
需求
限制指定Slurm分区中用户运行作业的内存使用量。
已完成操作
- 定义QOS:
Name MaxTRESPU Flags ---------- ------------- -------------------- normal memlim mem=750000M DenyOnLimit - 将QOS关联至目标分区:
PartitionName=testpartition Nodes=node[01-03] MaxTime=INFINITE State=UP qos=memlim
问题现象
执行简单作业提交命令:
srun -p testpartition hostname
通过squeue查看用户作业状态,结果如下:
# squeue -u testuser JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 38855732 nrpe hostname testuser PD 0:00 1 (QOSMaxMemoryPerUser)
疑问解答
你配置的MaxTRESPU=mem=750000M确实是用户级别的累计内存限制——它统计的是该用户当前所有运行中作业的内存请求总量,而非单个作业的实际内存使用量。
当提交新作业时,Slurm会计算该用户已运行作业的内存请求总和,加上当前作业的内存请求(未指定时使用分区默认值),如果总和超过750000M,就会将作业置于Pending(PD)状态,原因显示QOSMaxMemoryPerUser。
如果你的需求是限制单个作业的内存使用量,可以通过以下方式调整:
- 在QOS中配置
MaxTRESPA=mem=XXXM,设置单个作业的内存上限 - 在分区配置中设置
DefaultMemPerCPU或DefaultMemPerNode,规范作业默认内存请求;同时可保留DenyOnLimit,拒绝超出限制的作业提交
另外注意:squeue结果中作业所在分区是nrpe,但你配置的目标分区是testpartition,请确认作业是否提交到了正确的分区,避免因分区配置不匹配引发问题。
内容的提问来源于stack exchange,提问作者chuangsse
相关产品推荐
相关产品推荐

