温馨提示×

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 增加:
        • soft nofile 65535
        • hard nofile 65535
    • /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

0