在 Debian 里遇到 ulimit 报错,通常分几种情况。下面按常见错误 → 原因 → 解决办法给你说明。
bash: ulimit: open files: cannot modify limit: Operation not permitted原因:
soft limit 调高超过 hard limit解决办法:
# 查看当前限制
ulimit -a
ulimit -n
# 查看 hard limit
ulimit -Hn
✅ 正确做法(root):
ulimit -n 65535
⚠️ 普通用户只能:
改了
ulimit但重启又恢复
原因:
ulimit 只在当前 shell 生效/etc/security/limits.confsudo vim /etc/security/limits.conf
示例:
* soft nofile 65535
* hard nofile 65535
⚠️ 需要 PAM 支持 确保:
/etc/pam.d/common-session
/etc/pam.d/common-session-noninteractive
包含:
session required pam_limits.so
Debian 用 systemd 时,limits.conf 对服务不生效
编辑 service 文件:
sudo systemctl edit nginx
添加:
[Service]
LimitNOFILE=65535
然后:
sudo systemctl daemon-reload
sudo systemctl restart nginx
su / sudo 后 ulimit 被重置sudo su -
ulimit -n
# 变成 1024
原因:
su - 会重新加载 PAM 限制✅ 解决:
limits.conf 和 pam_limits.so 正确systemd-runulimit: max user processes: Operation not permitted
原因:
✅ 解决:
docker run --ulimit nofile=65535:65535 \
--ulimit nproc=65535:65535 \
your_image
或 docker-compose:
ulimits:
nofile:
soft: 65535
hard: 65535
cat /proc/sys/fs/file-max
临时修改:
sudo sysctl -w fs.file-max=1000000
永久:
echo "fs.file-max=1000000" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
你可以直接把 完整报错信息 + 使用场景(如 SSH / Docker / Nginx / 某程序)发出来,我可以帮你精准定位。