在 Ubuntu 里遇到 ulimit 相关错误,通常不是“ulimit 命令本身坏了”,而是某个资源限制被触顶或配置没生效。下面按「常见错误 → 原因 → 解决办法」给你一个实战清单。
bash: ulimit: open files: cannot modify limit: Operation not permittedToo many open filesfork: retry: No child processesulimit: core file size: invalid argumentulimit: error setting limitulimit -a
重点关注:
open files (-n)max user processes (-u)stack size (-s)ulimit -n 65535
ulimit -u 4096
⚠️ 注意:
查看 hard limit:
ulimit -Hn
/etc/security/limits.confsudo vim /etc/security/limits.conf
示例(针对所有用户):
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
或指定用户:
www-data soft nofile 100000
www-data hard nofile 100000
⚠️ 生效条件:
如果你是在 Docker / Nginx / MySQL / 自建服务 里报错:
sudo systemctl edit nginx
写入:
[Service]
LimitNOFILE=65535
LimitNPROC=4096
然后:
sudo systemctl daemon-reload
sudo systemctl restart nginx
sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=65535
DefaultLimitNPROC=4096
sudo systemctl daemon-reexec
Docker 容器默认继承宿主,但常被限制:
docker run --ulimit nofile=65535:65535 --ulimit nproc=4096:4096 ...
或在 docker-compose.yml:
ulimits:
nofile:
soft: 65535
hard: 65535
❌ limits.conf 改了但没用
✅ 多半是 systemd 服务没配
❌ sudo ulimit 报错
✅ ulimit 是 shell 内建命令,不能用 sudo 直接改其他进程
❌ 修改后重启 shell 没变化
✅ 确认是否用了 su 而不是 su -
# 当前进程限制
cat /proc/$$/limits
# 某 PID
cat /proc/<pid>/limits
如果你愿意,可以把具体报错信息 + 使用场景(SSH / Docker / systemd / 某个程序)贴出来,我可以给你精确修改方案。