在 CentOS 7.9 中,限制单个用户的进程数可以通过以下方法实现:


1. 修改 /etc/security/limits.conf 文件

这是最常用的方法,通过设置 nproc 参数来限制用户的进程数。

  1. 使用 root 用户编辑 /etc/security/limits.conf 文件:
vi /etc/security/limits.conf
  1. 在文件末尾添加以下内容:
username soft nproc 100  # 设置软限制为100个进程
username hard nproc 150  # 设置硬限制为150个进程

其中,username 是要限制的用户名,soft 是软限制(警告值),hard 是硬限制(最大值)。

  1. 保存并退出文件。
  2. 确保 /etc/pam.d/login 文件中包含以下行(通常默认已存在):
session required /lib/security/pam_limits.so
  1. 重新登录用户,使配置生效

2. 修改 /etc/security/limits.d/20-nproc.conf 文件

在 CentOS 7 中,nproc 的限制可能会被 /etc/security/limits.d/20-nproc.conf 文件覆盖,因此需要同时修改该文件。

  1. 编辑 /etc/security/limits.d/20-nproc.conf 文件:
vi /etc/security/limits.d/20-nproc.conf
  1. 修改或添加以下内容:
username soft nproc 100  # 设置软限制为100个进程
username hard nproc 150  # 设置硬限制为150个进程
  1. 保存并退出文件。
  2. 重新登录用户,使配置生效689

3. 使用 systemd 的 UserTasksMax 参数

如果系统使用 systemd,可以通过修改 UserTasksMax 参数来限制用户的进程数。

  1. 编辑 /etc/systemd/logind.conf 文件:
vi /etc/systemd/logind.conf
  1. 添加或修改以下行:
UserTasksMax=100  # 限制每个用户的最大任务数为100
  1. 保存并退出文件。
  2. 重启 systemd-logind 服务:
systemctl restart systemd-logind
  1. 重新登录用户,使配置生效

4. 使用 cgroups 限制用户资源

cgroups 是 Linux 内核功能,可以对用户或进程组的资源使用进行更精细的控制。

  1. 安装 libcgroup-tools
yum install libcgroup-tools

2.编辑 /etc/cgconfig.conf 文件,添加以下内容:

group user_limit {
    cpu {
        cpu.shares = 512;
    }
    memory {
        memory.limit_in_bytes = 500M;
    }
    pids {
        pids.max = 100;  # 限制最大进程数为100
    }
}

3.编辑 /etc/cgrules.conf 文件,添加以下内容:

username cpu,memory,pids user_limit

4.启动 cgconfig 和 cgred 服务:

systemctl start cgconfig
systemctl start cgred
  1. 重新登录用户,使配置生效

5. 临时修改(会话有效)

如果需要临时限制用户的进程数,可以使用 ulimit 命令:

ulimit -u 100  # 限制当前会话的进程数为100

此方法仅对当前会话有效,退出后失效89


总结

  • 永久限制:推荐使用 /etc/security/limits.conf 和 /etc/security/limits.d/20-nproc.conf 文件。
  • 系统级限制:可以使用 systemd 的 UserTasksMax 参数。
  • 高级控制:使用 cgroups 实现更精细的资源管理。
  • 临时限制:使用 ulimit 命令。