配置系统全局网络连接上限需分四层:一、调高fs.file-max设系统文件描述符总量;二、扩大net.core.somaxconn和tcp_max_syn_backlog以提升连接队列深度;三、优化time_wait策略,启用tcp_tw_reuse、禁用tcp_tw_recycle、缩短tcp_fin_timeout;四、配套systemd limitnofile、内存限制及应用层防护。

配置系统全局网络连接上限,核心是防止单个服务或进程耗尽系统资源(尤其是文件描述符和连接队列),导致合法请求被拒绝——这不是“端口被抢”,而是典型的连接耗尽型 DoS。关键不在堵流量,而在设硬边界、分层管控、配合回收机制。
一、调高内核级文件描述符总量(fs.file-max)
这是所有连接的总池子。默认值(如 8192 或 65536)远不够现代高并发服务使用:
- 临时生效:sudo sysctl -w fs.file-max=2097152(即 200 万)
- 永久生效:在 /etc/sysctl.conf 中追加一行:fs.file-max = 2097152,再运行 sudo sysctl -p
- 验证:执行 cat /proc/sys/fs/file-nr,第三列应 ≥ 设定值
二、扩大监听套接字队列深度(somaxconn)
它决定服务器能暂存多少“半开连接”(SYN_RECV)和“已建立待 accept 的连接”。太小会导致新连接直接丢包:
- 临时生效:sudo sysctl -w net.core.somaxconn=65535
- 永久生效:在 /etc/sysctl.conf 中添加 net.core.somaxconn = 65535
- 同步调大 SYN 半连接队列:net.ipv4.tcp_max_syn_backlog = 65535(防 SYN 洪水)
三、收紧 TIME_WAIT 连接回收策略(短连接场景必做)
大量短连接会堆积 TIME_WAIT 状态,占满本地端口(65535 个)和 FD,造成“端口用尽”假象:
- 启用端口复用:net.ipv4.tcp_tw_reuse = 1(仅对客户端有效,但服务端发起 outbound 请求时也适用)
- 关闭不安全的快速回收:net.ipv4.tcp_tw_recycle = 0(Linux 4.12+ 已移除,旧系统务必关)
- 缩短 FIN 超时:net.ipv4.tcp_fin_timeout = 30(从默认 60 秒减半)
四、配套服务级防护,避免全局参数被绕过
内核参数只是底座,真正起作用的是服务自身是否能拿到足够 FD 并合理使用:
- systemd 服务必须单独配 LimitNOFILE(如 nginx.service 中设为 131072),/etc/security/limits.conf 对其无效
- 给关键服务加内存硬限:MemoryMax=512M,防内存泄漏拖垮整机
- 应用层开启 keep-alive、限制单 IP 连接数(如 Nginx 的 limit_conn)、关闭非必要模块,减少隐式 FD 占用











