在任何改动前,先做基线测试(wrk/hey/ab),记录 RPS、延迟、CPU、网络吞吐与连接数。备份配置(/etc、/var/lib)与快照 VPS。确认运营商对“无限流量”是否有限制(突发流量是否会被限速)。
编辑 /etc/sysctl.d/99-vps-tune.conf,写入并执行 sysctl --system: net.core.somaxconn = 65535 net.core.netdev_max_backlog = 250000 net.ipv4.tcp_max_syn_backlog = 40960 net.ipv4.tcp_tw_reuse = 1 net.ipv4.ip_local_port_range = 10240 65535 net.ipv4.tcp_fin_timeout = 30 net.netfilter.nf_conntrack_max = 262144 然后 sysctl --system 生效并观察 /proc/net/sockstat、/proc/sys/net/ipv4/*。
修改 /etc/security/limits.conf 增加: * soft nofile 65536 * hard nofile 200000 并对 systemd 服务(如 nginx、haproxy)执行: systemctl edit nginx 在 override.conf 增加: [Service] LimitNOFILE=200000 之后 systemctl daemon-reload && systemctl restart nginx。用 cat /proc/$(pgrep nginx | head -1)/limits 验证。
nginx.conf 关键项: worker_processes auto; worker_rlimit_nofile 200000; events { use epoll; worker_connections 65536; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 15; keepalive_requests 10000; } 对于高并发静态或 proxy 场景,启用 sendfile 与缓存(proxy_cache、fastcgi_cache)。重启并用 nginx -T 校验。
关闭或调整 GRO/GSO(视包大小测试效果): ethtool -K eth0 gro off gso off 启用 irqbalance,并对关键队列做 CPU 亲和性 tuning(/proc/irq/*/smp_affinity)。检查中断分布: cat /proc/interrupts。增大 socket backlog: echo 65535 > /proc/sys/net/core/somaxconn。
使用 Redis/varnish 做热点缓存,设置 maxclients 并监控 evicted。数据库使用连接池(pgbouncer 或连接数限制)。水平扩展采用负载均衡器(HAProxy/LVS/Nginx)前置多台 VPS;会话共享用 Redis;滚动部署时使用健康检查与权重下线。自动扩容可用云 API + Terraform/Ansible 实现:脚本新增实例后,自动更新 HAProxy 后端并 reload 配置。
先在测试环境用 wrk 进行压测: wrk -t12 -c10000 -d60s http://ip:port/。逐步提高并发并观察 95/99 延迟、错误率与系统指标。用 tcpdump/ss 查看连接状态,检查 TIME_WAIT、SYN backlog。若发现超时或连接被拒绝,回到 sysctl 或 nginx 的 backlog/worker_connections 调优。
压测时避免在同一网络段生成流量瓶颈,推荐使用多台生成器并汇总结果(JMeterDistributed 或 k6 cloud)。
问:生产环境出现大量 502 或连接被拒绝,第一步该怎么排查?
答:查看 nginx 错误日志(/var/log/nginx/error.log),确认后端是否挂掉;使用 ss -antp|wc -l 与 ss -s 观察连接状态;检查 dmesg 是否有 OOM 或网络驱动报错;查看 conntrack 使用: cat /proc/sys/net/netfilter/nf_conntrack_count,与 nf_conntrack_max 比较,必要时放大并清理老连接;最后回退最近改动或扩容后再观察。
问:如何实现自动扩容以应对突发高并发?
答:搭建监控链路(Prometheus + node_exporter + Alertmanager);设置基于 CPU、网络(bytes/s)或连接数的告警;告警触发后调用云厂商 API(或 Terraform/Ansible)新建 VPS,运行初始化脚本(cloud-init)自动加入后端池,并在 HAProxy/Nginx 上通过 API 或 Consul Template 模板刷新后端并平滑 reload。
问:在高并发长期运行时,应持续关注哪些核心指标?
答:必须监控:CPU、内存、磁盘 I/O(iostat)、网卡吞吐(tx/ rx)、socket 状态(ESTABLISHED/TIME_WAIT)、nf_conntrack 使用、应用层延迟(P95/P99)、错误率与后端健康。配合告警策略和容量预案,定期演练扩容/故障切换。
