Linux内核文件描述符与网络连接数受系统、用户、进程三级限制共同影响,需同步配置sysctl.conf、limits.conf和systemd;关键参数包括fs.file-max、fs.nr_open、somaxconn等,完整调优可支撑高并发场景。

Linux内核中文件描述符与网络连接数不是单一参数决定的,而是由系统级、用户级、进程级三层限制共同作用。调优必须同步修改 /etc/sysctl.conf(系统全局)、/etc/security/limits.conf(用户资源限制)和 systemd 配置(服务级),缺一不可。
文件描述符三重限制与配置
文件描述符数量直接制约最大并发连接数(每个 TCP 连接占用至少 1 个 fd)。需同时满足以下三个条件:
-
系统总上限(fs.file-max):所有进程能打开的文件描述符总数,写入
/etc/sysctl.conf,建议设为2097152(200 万); -
单进程硬上限(fs.nr_open):单个进程可打开的最大 fd 数,也写入
/etc/sysctl.conf,值应 ≥fs.file-max,推荐2097152; -
用户级软/硬限制(limits.conf):对普通用户及服务进程生效,需在
/etc/security/limits.conf中添加:
* soft nofile 1048576
* hard nofile 1048576
root soft nofile 1048576
root hard nofile 1048576
网络连接队列与端口资源调优
高并发下,连接建立失败常因队列溢出或本地端口耗尽。关键参数如下:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
全连接队列(somaxconn):监听 socket 的已完成连接等待队列,设为
65535; -
半连接队列(tcp_max_syn_backlog):SYN 握手阶段的未完成连接队列,建议与
somaxconn一致,即65535; -
本地端口范围(ip_local_port_range):扩大可用临时端口,改为
1024 65535,提升短连接承载能力; -
连接跟踪上限(nf_conntrack_max):若启用 iptables/nftables 连接跟踪,需同步调高,如设为
1048576。
TIME-WAIT 与连接复用优化
大量短连接易导致 TIME-WAIT 堆积,占用端口和内存。合理复用可显著缓解:
-
启用 TIME-WAIT 复用:设置
net.ipv4.tcp_tw_reuse = 1(仅客户端或作为 NAT 出口时安全); -
缩短 FIN 超时时间:将
net.ipv4.tcp_fin_timeout从默认 60 秒降至30; -
限制 TIME-WAIT 数量:设
net.ipv4.tcp_max_tw_buckets = 100000,防内存耗尽; - 慎用 tcp_tw_recycle:该参数在 NAT 环境下会导致连接异常,2025 年起主流发行版已弃用,不建议开启。
完整标准模板(/etc/sysctl.conf 片段)
将以下内容追加至 /etc/sysctl.conf,然后执行 sysctl -p 生效:
fs.nr_open = 2097152
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 100000
net.netfilter.nf_conntrack_max = 1048576

















