在 Debian 里“文件句柄(open files / 文件描述符)”限制通常分 3 层 来调,很多人只改了一层不生效,下面按 最常用、最稳妥 的方式说明。
ulimit -n
查看某个进程:
cat /proc/<pid>/limits | grep "Max open files"
ulimit -n 65535
⚠️ 只对当前 shell 和由其启动的进程有效,重启失效。
/etc/security/limits.confsudo vim /etc/security/limits.conf
在末尾加(示例):
* soft nofile 65535
* hard nofile 65535
或指定用户:
www-data soft nofile 65535
www-data hard nofile 65535
Debian 默认一般已开启,但确认一下:
grep pam_limits /etc/pam.d/common-session
grep pam_limits /etc/pam.d/common-session-noninteractive
应有:
session required pam_limits.so
⚠️ 需要重新登录或重启
如果你是用 systemctl 启动的服务(Nginx / Redis / Java 等),limits.conf 不生效。
sudo systemctl edit nginx
写入:
[Service]
LimitNOFILE=65535
然后:
sudo systemctl daemon-reload
sudo systemctl restart nginx
sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=65535
sudo systemctl daemon-reexec
查看:
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
✅ 改了不生效,90% 是:
LimitNOFILEDocker 示例:
docker run --ulimit nofile=65535:65535 ...
ulimit -n
cat /proc/sys/fs/file-max
systemctl show nginx | grep LimitNOFILE
如果你愿意,可以告诉我:
我可以直接给你 精确配置。