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

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-session 含 session 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
不复杂但容易忽略细节,尤其权限作用范围和生效时机。








