在 Ubuntu 中修改 ulimit(资源限制)有多种方式,取决于你是临时生效还是永久生效,以及是对当前 shell / 用户 / 系统服务生效。
下面按常见场景说明。
ulimit -a
查看某一项,例如:
ulimit -n # 打开文件数
ulimit -u # 最大进程数
ulimit -n 65536
ulimit -u 4096
⚠️ 注意:
查看硬/软限制:
ulimit -Hn # 硬限制
ulimit -Sn # 软限制
/etc/security/limits.confsudo vim /etc/security/limits.conf
示例(针对用户 ubuntu):
ubuntu soft nofile 65536
ubuntu hard nofile 65536
ubuntu soft nproc 4096
ubuntu hard nproc 4096
格式:
<用户/组> soft/hard 资源类型 值
常用资源:
nofile:打开文件数nproc:进程数stack:栈大小memlock:锁内存✅ 需要 重新登录 才生效
❗ 对 systemd 服务不生效
确认以下文件包含:
session required pam_limits.so
检查:
grep pam_limits /etc/pam.d/common-session
grep pam_limits /etc/pam.d/common-session-noninteractive
Ubuntu 18.04+ 默认使用 systemd,limits.conf 对服务无效
sudo systemctl edit nginx
添加:
[Service]
LimitNOFILE=65536
LimitNPROC=4096
然后:
sudo systemctl daemon-reload
sudo systemctl restart nginx
sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=4096
sudo systemctl daemon-reexec
某些情况还需调整内核参数:
fs.file-max = 1000000
sudo sysctl -w fs.file-max=1000000
永久:
echo "fs.file-max = 1000000" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
❌ limits.conf 改了但没生效
→ 你是 systemd 服务?需要改 service 文件
❌ ulimit -n 改不上去
→ 超过了 hard limit 或系统 fs.file-max
❌ Docker 容器内不生效
→ 需要在宿主机或 docker run 加 --ulimit
如果你能告诉我:
我可以给你精确配置示例。