在 Debian(以及大多数 Linux 发行版)里,ulimit 不够用通常指的是:
open files,nofile)不够max user processes,nproc)不够下面按最常见场景给你一套完整解决方案。
ulimit -a
常见关键项:
-n:open files-u:max user processes-s:stack size例如:
ulimit -n
ulimit -u
ulimit -n 65535
ulimit -u 65535
⚠️ 重启或新开 shell 会失效。
/etc/security/limits.confsudo vim /etc/security/limits.conf
示例(对所有用户):
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
指定用户示例:
www-data soft nofile 100000
www-data hard nofile 100000
✅
soft是警告值,hard是上限
✅*表示所有用户(不含 root,root 需单独写)
Debian 默认一般是启用的,但请检查:
grep pam_limits /etc/pam.d/common-session
grep pam_limits /etc/pam.d/common-session-noninteractive
应有类似:
session required pam_limits.so
logout
# 或
reboot
再验证:
ulimit -n
如果你是 服务(nginx / redis / java / docker) 报错:
too many open files
sudo systemctl edit nginx
写入:
[Service]
LimitNOFILE=65535
LimitNPROC=65535
然后:
sudo systemctl daemon-reload
sudo systemctl restart nginx
查看:
cat /proc/$(pidof nginx)/limits
cat /proc/sys/fs/file-max
临时调整:
sudo sysctl -w fs.file-max=2097152
永久:
sudo vim /etc/sysctl.conf
fs.file-max = 2097152
sudo sysctl -p
容器里 ulimit 受宿主机 + docker 限制:
docker run --ulimit nofile=65535:65535 \
--ulimit nproc=65535:65535 \
your_image
或在 docker-compose.yml:
ulimits:
nofile:
soft: 65535
hard: 65535
ulimit -a 看哪一项不够/etc/security/limits.confLimit*fs.file-max如果你愿意,可以告诉我:
cat /etc/debian_version)我可以直接帮你写精确配置。