在 Debian 里,ulimit 相关限制可以从多个层面设置,具体取决于你想“对谁、在什么时候”生效。下面按常见场景说明。
ulimit -n 65535 # 打开文件数
ulimit -u 4096 # 最大进程数
ulimit -a # 查看所有限制
⚠️ 只对当前 shell 及其子进程有效,重启或新登录后失效。
/etc/security/limits.conf这是 PAM 登录用户的限制文件(SSH / 终端登录生效)。
sudo vim /etc/security/limits.conf
示例:
* soft nofile 65535
* hard nofile 65535
www-data soft nproc 4096
www-data hard nproc 4096
字段说明:
用户/组 软/硬限制 资源类型 值
常见资源:
nofile:打开文件数nproc:进程数core:core 文件大小memlock:锁定内存✅ 注意:
/etc/pam.d/common-session 里通常有:session required pam_limits.so
/etc/security/limits.d/*.confDebian 推荐把自定义配置放这里,避免覆盖主文件:
sudo vim /etc/security/limits.d/99-custom.conf
格式与 limits.conf 完全相同,按字母顺序加载。
如果你发现:
“limits.conf 设了,但 Nginx / MySQL 没生效”
那是因为 systemd 服务不走 PAM。
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
修改后需重启系统或 systemctl daemon-reexec。
某些限制由内核控制:
# 最大文件描述符总数
fs.file-max = 2097152
sudo vim /etc/sysctl.conf
fs.file-max = 2097152
sudo sysctl -p
Docker 默认会继承宿主限制,也可显式设置:
docker run --ulimit nofile=65535:65535 nginx
或 docker-compose.yml:
ulimits:
nofile:
soft: 65535
hard: 65535
ulimit -a(当前用户)cat /proc/<pid>/limits(看具体进程)limits.confsystemctl editsysctl如果你能说清楚:
我可以直接给你一份可直接用的配置。