发布于2026-08-20 阅读(0)
扫一扫,手机访问
fs.file-max、nofile软硬限制、LimitNOFILE这三处必须同步调高,且ulimit -Sn不能超过ulimit -Hn;limits.conf需配置软硬两行,同时要确保pam_limits.so加载;systemd服务必须单独设置LimitNOFILE;任何一个环节遗漏都会报“Too many open files”。

单靠 ulimit -n 改不了系统最大文件句柄数,它只管当前 shell 子进程;真正生效必须同步调高三个地方:fs.file-max(系统总池)、nofile 软硬限制(用户级单进程上限)、LimitNOFILE(systemd 服务专用),漏一个都会继续报 Too many open files。
ulimit -n 65535 设置后还是 1024不是命令输错了,而是软限制被硬限制卡死了。普通用户执行 ulimit -Sn 65535 时,如果 ulimit -Hn 输出是 4096 或更低,该命令会被静默截断——软限永远不能超过硬限。
ulimit -Hn,若 ≤ 4096,ulimit -Sn 65535 必然无效sudo ulimit -Hn 65535,但子进程不自动继承新硬限/etc/security/limits.conf 并重新登录:SSH 断开重连,或图形界面登出再进,不是新开终端窗口/etc/security/limits.conf 必须同时写两行,空格分隔(禁用 Tab):* soft nofile 65535 和 * hard nofile 65535/etc/security/limits.conf 配了却没生效的常见原因写了配置但 ulimit -n 仍是 1024,大概率是 PAM 没加载或顺序被覆盖。
/etc/pam.d/common-session(Debian/Ubuntu)或 /etc/pam.d/system-auth(RHEL/CentOS),确认有未注释行:session required pam_limits.so* 和 www-data 同时存在时,PAM 按文件顺序取第一个匹配项,后者可能被前者盖掉ps -o pid,uid,comm -u $(whoami),防止误用 root 或其他用户启动进程LimitNOFILE 必须单独设/etc/security/limits.conf 对 systemctl start 启的服务完全无效,因为 systemd 不走 PAM 登录流程。
/etc/systemd/system/nginx.service,在 [Service] 段下加:LimitNOFILE=65535/etc/systemd/system.conf,在 [Manager] 下加:DefaultLimitNOFILE=65535sudo systemctl daemon-reload,再 sudo systemctl restart nginxsystemctl show nginx | grep LimitNOFILE 或 cat /proc/$(pgrep nginx)/limits | grep "Max open files"fs.file-max 必须同步调高,否则系统总池先耗尽单个进程开到 65535 没用,如果 /proc/sys/fs/file-max 太小(比如默认 32768),多个进程一起开句柄,系统总池先撑爆,照样报错。
cat /proc/sys/fs/file-maxsudo sysctl -w fs.file-max=1048576/etc/sysctl.conf 追加 fs.file-max = 1048576,再运行 sudo sysctl -pcat /proc/sys/fs/file-nr,输出三列,第三列是 file-max,第二列是已用数容易被忽视的是,systemd服务根本不会读取limits.conf,但很多人调整完ulimit就觉得没问题了;还有些人只改了软限,却忘记了硬限,或者改了用户级就跳过了fs.file-max。这四个要点,只要有一个没做到位,Too many open files错误就会照样出现。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9