1.
评估当前瓶颈与基本准备
步骤1: 使用工具评估:ping、traceroute 检查到目标用户(内地/东南亚)的延迟;使用iftop、nload查看带宽使用。步骤2: 基线负载测试:安装wrk或ab(apt install wrk 或 apt install apache2-utils),执行: wrk -t4 -c200 -d30s http://your.site/,记录latency与requests/sec。步骤3: 备份配置:cp /etc/nginx/nginx.conf /root/nginx.conf.bak,cp /etc/php/* /root/php_conf_bak。
2.
内核与网络(sysctl)优化
步骤1: 编辑 /etc/sysctl.conf,加入(示例值,可根据内存与并发调整):
net.core.somaxconn=65535
net.core.netdev_max_backlog=200000
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_max_tw_buckets=200000
net.ipv4.tcp_syncookies=1
保存后执行 sysctl -p。步骤2: 打开epoll支持的应用(Nginx默认)以降低IO延迟。
3.
文件描述符与系统限制(ulimit)
步骤1: 查看当前限制: ulimit -n。步骤2: 永久提升:编辑 /etc/security/limits.conf,加入:
* soft nofile 200000
* hard nofile 200000
并在 /etc/systemd/system.conf 与 /etc/systemd/user.conf 中设置 DefaultLimitNOFILE=200000,然后重启 systemd: systemctl daemon-reexec。步骤3: 验证:重启服务后,ss -s 及 cat /proc/
/limits。
4.
Web服务器(Nginx)并发配置示例
步骤1: worker_processes 设置为 auto 或 CPU 核数;worker_connections 设为 4096 或更高(与 ulimit 配合)。示例片段:
worker_processes auto;
events { use epoll; worker_connections 4096; multi_accept on; }
http 块中开启 keepalive、gzip、sendfile:sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 15; gzip on;
步骤2: 调整 client_header_buffer_size、large_client_header_buffers 以避免大头阻塞。步骤3: 重载 nginx: nginx -t && systemctl reload nginx。
5.
应用层(PHP-FPM / Node / Java)调优
PHP示例:编辑 www.conf,选择 pm = dynamic 或 static。动态示例参数计算方法:pm.max_children ≈ (可用内存 - 系统内存) / 单个PHP进程内存。步骤: 使用 ps aux --sort=-rss | grep php-fpm 观察单进程占用。将 pm.start_servers、pm.min/max_spare 设置合理值。对于 Node/Java 推荐使用无阻塞框架或调整线程池与连接池。重启服务并监测慢请求日志。
6.
缓存、持久连接与CDN配合
步骤1: 在Nginx做静态缓存与proxy_cache:配置proxy_cache_path,合理设置 keys_zone、inactive、max_size,并在location使用 proxy_cache。步骤2: 使用Redis/Memcached做会话与热点缓存,确保网络延迟低(建议同机房或在同一VPC)。步骤3: 考虑使用香港节点CDN或多点就近接入,减少首次字节时间(TTFB)。
7.
监测与压测的持续流程
步骤1: 自动化监控:Prometheus + Grafana 或 Zabbix,监控CPU、内存、netstat、nginx stub_status、php-fpm。步骤2: 定期压测:用wrk脚本模拟真实并发,定位95/99百分位延迟。步骤3: 根据结果回到第2-6步循环优化。
8.
问:在香港VPS上调 sysctl 会影响稳定性吗?如何安全操作?
答:建议先备份 /etc/sysctl.conf,并在非高峰时段逐条修改并使用 sysctl -w 即时生效测试,如出现异常可立即回滚。逐步扩大值(例如 somaxconn 从 1024 提升到 4096 再到 65535),同时监控系统连接和内存,避免因为过高参数导致资源耗尽。
9.
问:如何计算 PHP-FPM 的 pm.max_children 合理值?
答:先测量单个PHP进程常态内存占用(RSS),可用内存 = 实例总内存 - 系统保留(例如 1GB)。然后 pm.max_children ≈ 可用内存 / 单进程RSS。留20%-30%余量避免OOM;必要时改用 PHP-FPM 的 static 模式并配合负载均衡。
10.
问:在香港VPS上并发突发流量时,优先调哪些配置能最快见效?
答:优先提升 file descriptors(ulimit)、net.core.somaxconn 与 net.ipv4.tcp_max_syn_backlog,确保 Nginx 的 worker_connections 与 keepalive 配置合理;同时开启缓存(proxy_cache/Redis)和CDN来削峰,短期内比扩容更快降低响应时间。
来源:从服务器配置角度看香港vps如何优化响应时间与并发