在 Debian 里遇到 ulimit 报错,通常并不是“ulimit 本身坏了”,而是当前用户/进程没有权限,或系统限制配置不允许你设置该值。下面按「常见原因 → 解决办法」说明。
bash: ulimit: open files: cannot modify limit: Operation not permittedulimit: max user processes: cannot modify limitsu: ulimit: Permission deniedtoo many open files现象
ulimit -n 65535
# bash: ulimit: open files: cannot modify limit: Operation not permitted
原因
解决 ✅ 用 root 设置,或改系统配置:
/etc/security/limits.confsudo vim /etc/security/limits.conf
添加(示例):
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
⚠ 注意:
检查
grep pam_limits /etc/pam.d/common-session
如果没有:
session required pam_limits.so
就加上。
原因
su - 才会加载 limitssu 不会✅ 正确用法:
su -
或
sudo -i
现象
limits.conf 配了,但服务还是报错原因
✅ 解决(服务级):
sudo systemctl edit nginx
[Service]
LimitNOFILE=65535
LimitNPROC=65535
然后:
sudo systemctl daemon-reload
sudo systemctl restart nginx
查看系统级限制:
cat /proc/sys/fs/file-max
临时调大:
sudo sysctl -w fs.file-max=1000000
永久:
sudo vim /etc/sysctl.conf
fs.file-max=1000000
sudo sysctl -p
容器内 ulimit 受宿主机限制:
docker run --ulimit nofile=65535:65535 ...
ulimit -a
cat /proc/$(pidof xxx)/limits
systemctl show xxx | grep Limit
你可以把具体报错原文 + 使用场景(普通用户 / 服务 / Docker / 脚本)发给我,我可以给你精准配置方案。