Linux LNMP中如何优化网络设置
小樊
40
2026-01-02 16:10:40
Linux LNMP网络设置优化实操指南
一 系统层面内核网络参数
- 建议将以下参数写入 /etc/sysctl.conf 并执行 sysctl -p 生效,按服务器内存与并发量分阶段调优:
- 连接队列与端口
- net.core.somaxconn:65535(提升全连接队列上限)
- net.core.netdev_max_backlog:65535(网卡接收队列)
- net.ipv4.tcp_max_syn_backlog:65535(半连接队列)
- net.ipv4.ip_local_port_range:1024 65535(扩大源端口池)
- 端口复用与回收(NAT/负载均衡/短连接高并发场景尤需)
- net.ipv4.tcp_tw_reuse:1(允许TIME_WAIT套接字复用)
- net.ipv4.tcp_tw_recycle:0(在NAT/云环境易引发问题,建议关闭;仅在单机直连且内核较老时谨慎开启)
- net.ipv4.tcp_max_tw_buckets:10000(限制TIME_WAIT总量,防止资源被占满)
- 握手与保活
- net.ipv4.tcp_syncookies:1(抵御SYN Flood)
- net.ipv4.tcp_synack_retries:2、net.ipv4.tcp_syn_retries:2(减少重试,加速失败回收)
- net.ipv4.tcp_keepalive_time:300、net.ipv4.tcp_keepalive_intvl:3、net.ipv4.tcp_keepalive_probes:2(更快清理僵死连接)
- 窗口与缓冲
- net.ipv4.tcp_window_scaling:1、net.ipv4.tcp_sack:1(启用窗口缩放与SACK)
- net.core.rmem_default:8388608、net.core.wmem_default:8388608
- net.core.rmem_max:16777216、net.core.wmem_max:16777216
- net.ipv4.tcp_rmem:4096 87380 16777216、net.ipv4.tcp_wmem:4096 65536 16777216
- 其它
- net.ipv4.tcp_fin_timeout:30(加速回收FIN状态)
- net.ipv4.tcp_slow_start_after_idle:0(避免长空闲后窗口收缩)
- net.ipv4.tcp_fastopen:3(启用TFO,需客户端配合)
- 如启用 iptables/nftables 连接跟踪(有状态防火墙/NAT),同步调大:
- net.netfilter.nf_conntrack_max:2097152
- 可按需缩短相关超时(如 tcp 的 established 状态),避免跟踪表被占满。
二 文件描述符与内核资源限制
- 系统级与用户级文件句柄
- 在 /etc/security/limits.conf 增加:
- 在 /etc/sysctl.conf 增加:
- fs.file-max:65535(或更高,视内存与业务而定)
- 使当前会话生效:ulimit -n 65535
- Nginx 侧建议与系统保持一致
- worker_rlimit_nofile:65535
- worker_connections:16384(结合业务与内存评估,worker_processes × worker_connections 为理论最大并发连接数)
- 说明:文件句柄不足会表现为“too many open files”“connection refused”等。
三 Nginx与内核协同的关键配置
- 事件与传输
- use epoll;(Linux首选事件模型)
- worker_processes:auto;多核可配 worker_cpu_affinity auto;
- sendfile:on;tcp_nopush:on;tcp_nodelay:on(静态资源高效传输、动态小包低延迟)
- 长连接复用(面向浏览器/客户端)
- keepalive_timeout:65
- keepalive_requests:100000
- 其它
- server_tokens:off(减小信息泄露与头部开销)
- fastcgi_read_timeout:300000(按后端PHP-FPM实际响应调整)
- 提示:Nginx 的 worker_connections 受限于系统的 somaxconn、文件句柄与内核网络栈参数,需与“一、二”协同调优。
四 验证与回滚
- 生效与观察
- sysctl -p 使内核参数生效;ss -s、netstat -s、cat /proc/net/sockstat、conntrack -L(若启用连接跟踪)观察队列、重传、TIME_WAIT、连接跟踪使用量
- 压测与基线对比:ab/wrk/hey + 监控(如 sar、Prometheus/Grafana),关注 P95/P99 延迟、连接成功率、SYN 重传、TIME_WAIT 数量
- 回滚策略
- 逐项回滚可疑参数,每次变更后留出观察窗口;保留变更记录与回滚脚本,便于快速恢复
五 场景化建议与注意事项
- 高并发短连接(API/短RPC)
- 优先:tcp_tw_reuse=1、tcp_max_tw_buckets=10000、tcp_max_syn_backlog/somaxconn 提升至高位、扩大 ip_local_port_range
- 谨慎:tcp_tw_recycle(NAT/云环境易出问题)
- 长连接(反向代理/长轮询/WebSocket)
- 提高 keepalive_timeout/keepalive_requests,确保后端与应用层也支持长连接复用
- 启用 TFO(tcp_fastopen=3)
- 需客户端支持;在 CDN/边缘节点与源站之间收益更明显
- 有状态防火墙/NAT
- 同步调大 nf_conntrack_max 与相关超时,避免“nf_conntrack: table full, dropping packet”
- 云厂商与虚拟化环境
- 某些平台对 tcp_tw_recycle、时间戳等行为有限制或已知问题,优先遵循厂商最佳实践,默认关闭 recycle