Linux 网络栈调优:从内核到应用

为什么要调优 Linux 网络栈 Linux 内核默认的网络参数是为通用场景设计的,保守而安全。但在高并发 Web 服务、大规模负载均衡器、CDN 节点等场景下,默认值会成为瓶颈。典型症状包括: dmesg 出现 nf_conntrack: table full, dropping packet ss -s 显示大量 TIME-WAIT 连接 压测时 CPU 没跑满但吞吐量上不去 网卡 PPS(包每秒)远低于硬件能力 这些问题大多源于内核网络参数未调优。从协议栈参数、conntrack、网卡多队列、拥塞控制四个层面详细梳理。 内核网络参数的完整说明可参考 kernel.org 文档,本文涉及的参数在 Documentation/networking/ip-sysctl.txt 中有详细定义。 TCP/IP 协议栈关键内核参数 所有参数通过 sysctl 或 /proc/sys/net/ 查看和修改。以下参数均在 net.ipv4 命名空间下。 连接队列参数 # 查看当前值 sysctl net.ipv4.tcp_max_syn_backlog sysctl net.core.somaxconn sysctl net.core.netdev_max_backlog somaxconn — 监听套接字的全连接队列上限: # 默认值通常为 128 或 4096(取决于内核版本) # 高并发场景建议设置为 65535 net.core.somaxconn = 65535 全连接队列存放已完成三次握手但尚未被 accept() 取走的连接。队列满后新连接被丢弃,客户端看到连接超时。注意:应用层面的 listen(fd, backlog) 的 backlog 值不能超过 somaxconn,实际取两者最小值。...

May 7, 2024 · 7 分钟 · 1284 字 · 徐保金

Linux 内核参数调优实战手册

概述 Linux 内核通过 /proc/sys/ 和 sysctl 接口暴露了数千个可调参数,涵盖网络、内存、文件系统、安全等各个方面。合理调整这些参数可以显著提升系统性能和稳定性,但盲目调参也可能适得其反。本文逐步梳理 sysctl 体系,按网络、文件描述符、内存、安全四大维度展开,并提供生产环境调优模板和参数验证方法。 sysctl 体系 参数查看与修改 # 查看所有参数 $ sysctl -a # 查看特定参数 $ sysctl net.ipv4.tcp_max_syn_backlog $ sysctl vm.swappiness # 临时修改(重启失效) $ sysctl -w vm.swappiness=10 # 从文件加载 $ sysctl -p /etc/sysctl.d/99-custom.conf # 永久生效:写入配置文件 # /etc/sysctl.conf — 传统配置文件 # /etc/sysctl.d/*.conf — 推荐方式(按字母序加载) 配置文件加载顺序 /etc/sysctl.d/ 下按文件名字母序加载: 00-default.conf → 默认值 50-network.conf → 网络参数 99-custom.conf → 自定义参数(最后加载,覆盖前面) 最后加载 /etc/sysctl.conf(如果存在) 参数命名空间 kernel.* — 内核通用参数 vm.* — 虚拟内存参数 fs.* — 文件系统参数 net....

December 21, 2023 · 10 分钟 · 2115 字 · 徐保金