You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS环境下如何限制非Slurm提交进程的资源

限制非Slurm提交进程资源的可行方案

针对单节点集群(登录/计算节点合一)的场景,要区分限制非Slurm交互式进程与Slurm作业进程,以下是几种实用方案:

方案1:Systemd Slice + PAM(精准控制,推荐)

利用systemd的cgroup切片机制,给用户交互式会话绑定资源限制,Slurm作业会自动使用独立的cgroup,不受此限制。

  1. 创建限制用的systemd切片单元
    编辑/etc/systemd/system/limit-interactive.slice文件:
[Unit]
Description=限制非Slurm交互式进程的资源切片

[Slice]
CPUQuota=200%  # 对应2个CPU核心(100%=1核心)
MemoryMax=4G   # 最大内存限制4GB
MemoryHigh=4G  # 内存超过阈值时触发回收
  1. 激活并加载切片
sudo systemctl daemon-reload
sudo systemctl enable --now limit-interactive.slice
  1. 配置PAM让登录会话加入切片
    编辑/etc/pam.d/login和/etc/pam.d/sshd,添加一行:
session    required    pam_systemd.so set_slice=limit-interactive.slice

此后用户通过SSH/本地登录的所有进程都会纳入该切片的资源限制,Slurm提交的作业会由Slurm创建专属cgroup,不受影响。

方案2:Slurm官方PAM模块(更贴合Slurm生态)

Slurm自带pam_slurm模块,可直接识别Slurm作业环境并区分限制。

  1. 安装pam_slurm模块
    多数发行版中该模块随Slurm包附带,比如CentOS/RHEL安装slurm-pam,Debian/Ubuntu安装slurm-pam-dev。

  2. 配置PAM规则
    编辑/etc/pam.d/common-session(或对应登录/SSH配置文件),添加:

session    required    pam_slurm.so max_cpus=2 max_mem=4096

参数说明:max_cpus为CPU核心数,max_mem为内存限制(单位MB)。该模块会自动跳过Slurm作业进程,仅限制交互式会话。

方案3:自定义PAM执行脚本(轻量但精度有限)

通过PAM执行脚本,根据环境变量判断是否为Slurm作业,动态设置ulimit限制(仅能限制进程数、内存大小,无法精准绑定CPU核心)。

  1. 创建限制脚本/usr/local/bin/limit_non_slurm.sh:
#!/bin/bash
# 非Slurm会话则设置资源限制
if [ -z "$SLURM_JOB_ID" ]; then
    ulimit -u 4          # 限制最大进程/线程数(对应2核心场景)
    ulimit -v 4194304    # 限制虚拟内存4GB(单位KB)
fi
exit 0
  1. 赋予脚本执行权限:
sudo chmod +x /usr/local/bin/limit_non_slurm.sh
  1. 配置PAM调用脚本
    编辑/etc/pam.d/login和/etc/pam.d/sshd,添加:
session    required    pam_exec.so /usr/local/bin/limit_non_slurm.sh

验证方式

  • 交互式会话测试:直接登录后运行stress --cpu 4 --vm-bytes 5G,观察CPU使用率不超过2核心,内存占用被限制在4GB以内。
  • Slurm作业测试:提交示例中的sbatch脚本,运行相同stress命令,确认能使用申请的资源。

内容的提问来源于stack exchange,提问作者GooT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:05:20