本文目录导读:

net.core.somaxconn 是一个 Linux 内核参数,它定义了每个套接字(socket)监听队列的最大长度,这个参数主要影响 listen() 系统调用的 backlog 参数。
要监听(即查看)当前系统的 net.core.somaxconn 值,有以下几种方法:
使用 sysctl 命令(最常用)
# 查看当前值 sysctl net.core.somaxconn # 查看所有与 net.core 相关的参数 sysctl -a | grep net.core.somaxconn
输出示例:
net.core.somaxconn = 4096
直接查看 /proc 文件系统
cat /proc/sys/net/core/somaxconn
查看所有网络相关内核参数
# 查看 net.core 所有参数 sysctl -a | grep net.core # 输出示例: # net.core.somaxconn = 4096 # net.core.rmem_max = 212992 # net.core.wmem_max = 212992 # ...
编程方式查看(以 C 语言为例)
#include <stdio.h>
#include <sys/sysctl.h>
#include <sys/socket.h>
int main() {
int value;
size_t len = sizeof(value);
int mib[2] = {CTL_NET, NET_CORE};
// 注意:NET_CORE_SOMAXCONN 需要根据具体系统定义
// 通常为 18 或类似值
// 更简单的方法是使用 sysctl 系统调用
if (sysctlbyname("net.core.somaxconn", &value, &len, NULL, 0) == 0) {
printf("net.core.somaxconn = %d\n", value);
} else {
perror("sysctlbyname failed");
}
return 0;
}
修改临时值(测试用)
# 临时修改(重启后失效) sudo sysctl -w net.core.somaxconn=1024 # 或 echo 1024 | sudo tee /proc/sys/net/core/somaxconn
永久修改
编辑 /etc/sysctl.conf 或 /etc/sysctl.d/ 下的配置文件:
# 添加或修改行 echo "net.core.somaxconn = 1024" | sudo tee -a /etc/sysctl.conf # 使配置生效 sudo sysctl -p
"监听" 的注意事项
net.core.somaxconn是系统全局的套接字监听队列最大长度- 应用程序的
listen()调用的backlog参数不能超过这个值 - 高并发服务器(如 Nginx、Redis)通常会将此值设为较大的数(如 65535)
- 修改后需要重启相关服务才能生效
如果你想要监控某个特定应用程序监听队列的实际使用情况,可以:
# 查看监听队列状态(ss 命令) ss -lnt | grep :80 # 查看某个端口监听队列的当前使用情况 ss -lnt | grep -E "LISTEN|State" Recv-Q Send-Q Local Address:Port Peer Address:Port 0 100 0.0.0.0:80 0.0.0.0:* LISTEN
Recv-Q表示当前等待被 accept 的连接数Send-Q表示监听队列的最大长度(即 backlog 值,受 somaxconn 限制)
这样你就可以看到实际连接 Queue 的使用情况与 somaxconn 限制的关系。
标签: 监听
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。