Linux高并发调优需聚焦连接管理、内存分配、中断处理和上下文切换四维度,通过内核参数、资源限制、网络栈及I/O调度等针对性优化实现性能收敛。

Linux 高并发场景下,系统瓶颈往往不在应用层,而在内核参数、资源限制、网络栈和 I/O 调度等底层环节。调优不是堆参数,而是基于负载特征做针对性收敛——重点在连接管理、内存分配、中断处理和上下文切换四个维度。
网络连接与套接字优化
高并发服务(如 Web、API 网关)常受限于端口耗尽、TIME_WAIT 积压或连接队列溢出。
- 启用 net.ipv4.ip_local_port_range = 1024 65535 扩大临时端口范围,避免“Cannot assign requested address”
- 设置 net.ipv4.tcp_fin_timeout = 30 缩短 FIN_WAIT_2 超时;配合 net.ipv4.tcp_tw_reuse = 1 允许 TIME_WAIT 套接字重用于客户端连接(需确保 timestamps 开启)
- 调大监听队列:net.core.somaxconn = 65535 和应用层 listen() 的 backlog(如 Nginx 的
listen ... backlog=65535)保持一致 - 关闭 SYN 攻击防护误判:net.ipv4.tcp_syncookies = 0(仅限可信内网),避免握手延迟
内存与文件描述符管控
每个连接至少占用一个 socket buffer 和 file descriptor,内存碎片和 fd 耗尽是常见断点。
- 提升单进程上限:ulimit -n 1048576,并在
/etc/security/limits.conf中固化:* soft nofile 1048576、* hard nofile 1048576 - 调整 TCP 内存自动调节边界:net.ipv4.tcp_rmem = 4096 65536 8388608、net.ipv4.tcp_wmem = 4096 65536 8388608,避免小包浪费或大流阻塞
- 禁用 swap 对低延迟服务至关重要:vm.swappiness = 0;若必须保留,设为 1 以减少主动换出
- 启用透明大页(THP)需谨慎:echo never > /sys/kernel/mm/transparent_hugepage/enabled,避免内存分配卡顿
CPU 与中断亲和性调优
大量连接导致软中断(NET_RX/NET_TX)集中到少数 CPU,引发调度争抢与缓存失效。
- 绑定网卡 IRQ 到指定 CPU 核:
echo 2 > /proc/irq/$(cat /proc/interrupts | grep eth0 | awk '{print $1}' | sed 's/:$//')/smp_affinity_list(示例绑至 CPU2) - 启用 RPS(Receive Packet Steering):设置 net.core.rps_sock_flow_entries = 32768,并在
/sys/class/net/eth0/queues/rx-0/rps_cpus写入十六进制掩码(如ff表示前 8 核) - 对多线程服务(如 Envoy、Nginx worker),用
taskset -c 0-3 ./server固定 CPU 绑核,减少跨核迁移开销
I/O 与调度器适配
高并发下磁盘日志、TLS 握手密钥计算、配置热加载等易触发同步 I/O 或调度延迟。
- SSD 场景优先使用 mq-deadline 或 kyber 调度器(
echo kyber > /sys/block/nvme0n1/queue/scheduler),避免 cfq 带来的延迟毛刺 - 日志写入改用异步方式:rsyslog 配置
$ActionQueueType LinkedList,或应用层采用 ring-buffer + worker thread 刷盘 - 禁用 NUMA 平衡干扰:vm.numa_balancing = 0;若业务跨 NUMA 访存密集,可手动
numactl --cpunodebind=0 --membind=0 ./app - 启用 net.core.netdev_max_backlog = 5000 应对突发流量,防止网卡驱动丢包
调优必须结合监控闭环:用 ss -s 看连接状态分布,cat /proc/net/snmp 查 TCP 重传,perf top -e irq:softirq_entry 定位软中断热点。没有银弹,只有持续观测 + 小步验证。










