# 提高 Linux 并发连接容量

> 检查并调整文件描述符与 TCP 监听队列，解决高并发系统瓶颈

---

LLMS 索引： [llms.txt](/llms.txt)

---

高并发隧道同时受进程文件描述符、监听队列、临时端口、连接跟踪和内存限制。只有监控或日志表明达到系统上限时才应调整；单纯增大参数不能弥补 CPU、内存或带宽不足。

## 先检查现状

```shell
ulimit -n
sysctl net.core.somaxconn net.ipv4.tcp_max_syn_backlog
ss -s
cat /proc/sys/fs/file-nr
```

常见日志包括 `too many open files`、监听队列溢出或大量连接停留在异常状态。先估算 NPS、NPC、目标服务以及监控进程共同需要的文件描述符数量。

## 文件描述符

使用 systemd 运行 NPS 时，在服务覆盖配置中设置，而不是只修改当前终端的 `ulimit`：

```ini
# systemctl edit nps
[Service]
LimitNOFILE=1048576
```

应用并重启服务：

```shell
systemctl daemon-reload
systemctl restart nps
cat /proc/$(pidof nps)/limits | grep 'open files'
```

实际服务名可能不同，请以安装时注册的 unit 为准。

## 监听队列

可按压测结果建立 `/etc/sysctl.d/99-nps.conf`：

```ini
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
```

然后执行：

```shell
sysctl --system
```

`somaxconn` 限制已完成握手的监听队列，`tcp_max_syn_backlog` 影响尚未完成握手的 SYN 队列。数值应结合内存、连接速率和攻击面压测确定，不建议照搬极端配置。

## 排障边界

- 大量出站连接失败时检查本机临时端口范围和 `TIME_WAIT`，不要先启用危险的连接复用参数。
- 使用容器时还要检查容器的 `nofile` 限制、宿主机 conntrack 和端口发布规则。
- SYN flood 应由防火墙、云安全组或专业防护处理，内核队列调大不是访问控制。
- NPS 的[客户端最大连接数](/extend/feature/connection-limit.html)是应用级保护，不能替代系统容量限制。

---

反链：

- [限制客户端连接数](/extend/feature/connection-limit.html)
- [桥接连接多路复用](/extend/feature/multiplexing.html)
