Linux ulimit 限制配置教程

7次阅读

ulimit 用于控制 linux 单个用户或进程的系统资源上限,分软限制(用户可调但不超硬限)和硬限制(仅 root 可改),支持临时设置(当前会话)与永久配置(/etc/security/limits.conf),并需配合内核参数如 fs.file-max 调整全局限制。

Linux ulimit 限制配置教程

Linux 的 ulimit 用于控制单个用户或进程可使用的系统资源上限,比如文件描述符数量、最大进程数、CPU 时间等。它分临时设置和永久生效两种方式,关键在于区分软限制(soft)和硬限制(hard):软限制可由普通用户自行调整(但不能超过硬限制),硬限制只能由 root 修改。

查看当前 ulimit 限制

在终端中运行以下命令:

  • ulimit -a:显示所有资源的当前软限制
  • ulimit -n:只看最大打开文件数
  • ulimit -u:查看单用户最大进程数
  • ulimit -t:查看 CPU 时间限制(秒)

注意:这些值默认只对当前 shell 会话有效,关闭终端即失效。

临时修改 ulimit(仅当前会话)

适合调试或测试场景,无需 root 权限(只要不突破硬限制):

  • ulimit -n 8192:将当前会话最大文件描述符设为 8192
  • ulimit -u 4096:限制当前用户最多启动 4096 个进程
  • ulimit -s 16384:设置堆栈大小为 16MB(对 Java 或递归程序较重要)
  • -H-S 可分别指定硬 / 软限制,例如:ulimit -Hn 16384

若提示“Operation not permitted”,说明已触及硬限制,需 root 权限或修改配置文件。

永久设置 ulimit(推荐方式)

编辑 /etc/security/limits.conf,这是 PAM 模块读取的全局配置文件:

  • 每行格式: 用户名 / 组名 类型 限制项 数值
  • 类型填 soft(软限制)或 hard(硬限制)
  • 常见限制项:nofile(文件描述符)、nproc(进程数)、stack(堆栈)、fsize(文件大小)
  • 示例(为用户 www 设置):
    www soft nofile 32768
    www hard nofile 65536
    @developers hard nproc 2048

保存后,新登录的会话(包括 SSH 或 su 切换)才会生效。图形界面登录可能需重启会话或检查 PAM 是否启用 limits 模块(确认 /etc/pam.d/common-sessionsession required pam_limits.so)。

补充:系统级全局限制

ulimit 是用户级限制,而有些资源还需调整内核参数:

  • 全系统最大文件描述符数:
    编辑 /etc/sysctl.conf,添加:
    fs.file-max = 2097152
    执行 sysctl -p 生效
  • 某些发行版(如新版 Ubuntu)可能忽略 limits.conf,需额外检查:
    确保 /etc/pam.d/sshd/etc/pam.d/login 包含:
    session required pam_limits.so

不复杂但容易忽略细节,尤其权限作用范围和生效时机。

text=ZqhQzanResources