1. 总体方案与准备(先做检查再改动)
- 确认当前环境:操作系统版本(cat /etc/os-release)、内核版本(uname -r)、网卡型号(lspci | grep Ethernet)和驱动。
- 备份当前配置:cp /etc/sysctl.conf /root/sysctl.conf.bak;记录现有ulimit(ulimit -n),systemd服务文件备份。
- 建议维护窗口:在低峰时段按步骤执行,逐条改动并测试,避免一次性改动过多导致不可预期问题。
2. 内核网络栈基础调优(sysctl 实操)
- 临时生效测试:使用 sysctl -w 修改值,例如 sysctl -w net.core.somaxconn=1024。测试通过后写入 /etc/sysctl.d/99-custom.conf。
- 推荐项(示例,可按流量调高):net.core.somaxconn=1024;net.core.netdev_max_backlog=5000;net.ipv4.tcp_max_syn_backlog=2048。
- TCP 连接回收与端口范围:net.ipv4.ip_local_port_range="10240 65535";net.ipv4.tcp_tw_reuse=1;net.ipv4.tcp_fin_timeout=30。
3. TCP 性能细节与拥塞控制
- 启用 BBR(内核需 >=4.9):sysctl -w net.ipv4.tcp_congestion_control=bbr;确认 lsmod | grep bbr。
- 启用 TCP 快速打开(可选):sysctl -w net.ipv4.tcp_fastopen=3 并在应用层配置支持。
- SYN 缓解:开启 syncookies sysctl -w net.ipv4.tcp_syncookies=1,并监控 SYN 洪泛。
4. 文件描述符与进程限制(ulimit 与 systemd)
- 永久修改:在 /etc/security/limits.conf 添加 * soft nofile 200000 和 * hard nofile 200000。重启登录会话生效。
- 对 systemd 服务生效:在服务单元文件 [Service] 下添加 LimitNOFILE=200000,并执行 systemctl daemon-reload && systemctl restart your.service。
- 应用层检查:确认进程实际可用 fd(cat /proc/
/limits)。
5. 网卡与中断调度(ethtool 与 irqbalance)
- 查看并调大 TX/RX 队列:ethtool -g eth0 查看可用值,ethtool -G eth0 rx 4096 tx 4096 设置环形缓冲。
- 启用/禁用 offload(视应用):ethtool -K eth0 gro on gso on tso on;如果出现问题可逐项关闭排查。
- 中断绑定:使用 irqbalance 或手动通过 echo > /proc/irq//smp_affinity 将高流量队列绑定到多核,减少单核瓶颈。
6. 应用层(Nginx/HAProxy)与套接字设置
- Nginx: 在 events 中设置 worker_connections 4096,worker_rlimit_nofile 200000;在 http 中设置 keepalive_timeout、tcp_nopush、tcp_nodelay。
- 使用 SO_REUSEPORT:在 Nginx 或自研服务启用 reuseport 可让内核分配连接到多个 worker,提升多核吞吐。
- HAProxy: tune.nbthread 与 maxconn 配合 ulimit,frontend/backened 的 timeout 参数合理配置避免连接占用过长。
7. 连接追踪与防火墙(conntrack / nftables)
- 检查 conntrack 限制:cat /proc/sys/net/netfilter/nf_conntrack_max,必要时增大(例如 262144)并监控 /proc/net/nf_conntrack。
- 使用 nftables 替代复杂 iptables,规则尽量放到前面过滤无效包,减少 conntrack 处理。
- SYN 洪泛时启用 iptables syncookies 或通过硬件/云厂商的防护。
8. 负载分发与扩展策略(水平扩展、Anycast、CDN)
- 本地负载均衡:在多台后端间使用 LVS 或 HAProxy 做四层分发,减少 TCP 重建开销。
- 横向扩展:把短连接拆为无状态服务,使用 Redis/session共享,便于横向扩容。
- 越南节点特性:考虑使用越南本地骨干带宽和运营商直连,或采用 CDN/边缘缓存,降低跨境链路抖动影响。
9. 性能测试与监控(实操命令与流程)
- 压测工具:使用 wrk、k6、ab,根据协议选用,示例 wrk -t12 -c1000 -d60s http://ip:port/。逐步增加并发观察系统指标。
- 监控命令:ss -s / ss -tanp 观察 socket 状态;netstat -s;vmstat 1;iostat -x 1;dstat。
- 性能指标:关注 TCP TIME_WAIT、SYN_RECV、listen 队列溢出(查看 dmesg 或 netstat 报错)及 CPU/IRQ 平衡。
10. 部署与回滚流程(实操建议)
- 分阶段部署:先在测试环境或小流量灰度节点逐项生效并压测,确认无误后推广到生产池。
- 自动化:把 sysctl、ethtool、systemd 修改写入运维脚本/Ansible playbook,便于回滚。
- 回滚机制:记录每次更改和时间点,出现异常立即回滚到备份配置并排查日志。
11. 常见问题与快速排查步骤(FAQ式操作)
- 如果出现 accept 队列溢出(listen queue overflow):提高 net.core.somaxconn、应用 backlog、确认应用调用 listen(backlog) 合理并启用 reuseport。
- 如果多核 CPU 使用率极端不均衡:检查 irq_affinity、禁用单核 bottleneck 的内核模块或开启 SO_REUSEPORT 分散连接到多个 worker。
12. 问答:如何逐步验证改动有效性?
问:我做了 sysctl 和 ethtool 的改动,如何判断是否提升了稳定性与吞吐?
答:先在灰度环境用 wrk/k6 做基线压测(记录 RPS/延迟/错误率),然后应用改动重复压测对比,结合 ss -s、vmstat、iostat、dmesg 检查连接队列、CPU/IO、内核日志错误,若 RPS 增加且错误率下降则认为有效。
13. 问答:越南原生IP有特殊网络问题,如何针对性优化?
问:越南节点经常出现链路抖动和丢包,怎么调整能缓解?
答:优先在链路层优化:使用本地带宽更好的提供商、调整 ethtool RX/TX 环,启用 GSO/GRO 降低 CPU 并发上下文;在应用层通过重试、短超时与幂等设计减少抖动影响,并考虑前置 CDN/边缘缓存降低跨境依赖。
14. 问答:上线前的最终检查清单有哪些?
问:准备把优化推广到全量,必须做哪些最后检查?
答:检查点包括:备份与回滚方案完备;监控告警(连接数、cpu、irq、丢包)到位;压测结果通过;systemd/服务限制已生效;安全组/防火墙规则确认;并在低峰窗口逐步上升流量观察。
来源:优化建议提高越南原生ip服务器在高并发场景下的稳定性与吞吐