somaxconn¶
Overview¶
在 Linux 系统中,somaxconn(socket maximum connections)是一个内核参数,用于 限制 socket 监听队列(listen backlog)的最大长度。它控制了当一个服务(如 Nginx、Redis、MySQL、Node.js 服务等)调用 listen() 时,允许在等待处理的连接请求队列中最多可以有多少个连接。
如果连接请求过多而队列满了,新的连接可能会被丢弃或拒绝,导致“连接超时”或“connection refused”错误。
默认值通常是:
查看和配置somaxconn¶
查看somaxconn当前值¶
配置somaxconn值¶
临时调整
永久调整
创建专用配置文件(推荐)
验证¶
检查服务连接队列(可选)¶
输出示例:
Recv-Q:当前等待 accept 的连接数Send-Q:就是 somaxconn 和应用 backlog 的最小值(取小的那个)
推荐值(根据场景)¶
| 普通 Web 服务 | 4096 ~ 16384 |
|---|---|
| 高并发服务(如 API 网关、Redis) | 32768 ~ 65535 |
| 超高并发/压测环境 | 65535 |
优化网络性能相关参数¶
这些参数用于控制 SYN 队列,与 somaxconn 配合使用效果更好。
# 调大接受连接队列(全连接队列上限)
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 5000
# 增加网络设备接收队列长度
net.ipv4.tcp_max_syn_backlog = 65535
# 启用 SYN Cookies(防止 SYN Flood 攻击)
net.ipv4.tcp_syncookies = 1
应用层配合¶
即使你把 somaxconn 调大,应用程序本身也必须在 listen() 时指定足够大的 backlog 参数,否则仍然受限。
- Nginx
- Node.js
- Python(socket)
- Redis(redis.conf)