1.
总体部署与准备
- 操作系统建议:使用最新稳定的Ubuntu LTS或Debian,尽量选择离主要用户近的美国机房。
- 备份与快照:首次优化前在控制面板创建快照(例如DigitalOcean/AWS Lightsail/Hetzner)。
- 安装常用工具:sudo apt update && sudo apt install -y htop iotop sysstat curl wget build-essential vim net-tools iproute2
2.
Nginx 基本与高并发配置
- 在/etc/nginx/nginx.conf 做修改:worker_processes auto; worker_connections 65536; use epoll; sendfile on; tcp_nopush on; tcp_nodelay on;
- 增加文件描述符:在/etc/systemd/system/nginx.service.d/override.conf 添加 [Service] LimitNOFILE=100000,sudo systemctl daemon-reload && sudo systemctl restart nginx。
- keepalive 与超时:keepalive_timeout 15; client_max_body_size 16M;并开启 gzip/brotli 压缩与缓存头配置。
3.
PHP-FPM 调整(如使用PHP)
- 编辑 /etc/php/7.x/fpm/pool.d/www.conf(版本替换为实际版本),设置 pm = dynamic/static;若动态:pm.max_children 根据内存计算(每个进程内存*max_children < 可用内存的70%)。
- 设置 pm.start_servers、pm.min_spare_servers、pm.max_spare_servers、pm.max_requests = 500-1000 防止内存泄漏;重启 sudo systemctl restart php7.x-fpm。
4.
缓存策略:静态与动态缓存实操
- 静态资源放入 /var/www/static,Nginx 配置 expires max 并开启 Content-Encoding。使用CDN(Cloudflare/CloudFront)在美国边缘缓存静态文件。
- 动态页面:优先使用 Nginx FastCGI Cache 或 Varnish;示例 Nginx FastCGI Cache:在 nginx.conf 中配置 fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYCACHE:256m inactive=60m max_size=10g;在 location 设置 fastcgi_cache MYCACHE; fastcgi_cache_valid 200 60m。
- 缓存失效:设计 Cache-Control 与 purging API(通过 curl 调用 Nginx 缓存清理脚本或 Varnish ban 命令)。
5.
Redis / Memcached 用于会话和热点数据
- 安装 Redis:sudo apt install redis-server,编辑 /etc/redis/redis.conf 设置 maxmemory 与 maxmemory-policy volatile-lru 或 allkeys-lru,示例 maxmemory 2gb;重启 service redis-server restart。
- 用作会话:将 PHP session.save_handler 指向 Redis 或用框架内置驱动配置。
- 监控与持久化:如可接受数据丢失,关闭 RDB/AOF 或把 AOF 策略调为 everysec,保证性能优先。
6.
MySQL / MariaDB 性能调优
- 编辑 /etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf:innodb_buffer_pool_size 设置为总内存的60%-70%;innodb_log_file_size 512M-1G(视写入量);innodb_flush_method O_DIRECT;query_cache_type = 0(新版本禁用)。
- 调整连接与线程:max_connections 根据并发估算(配合连接池),thread_cache_size = 100,table_open_cache = 2000。
- 排查慢查询:启用慢查询日志 long_query_time=0.5,使用 pt-query-digest 或 mysqlsla 分析并添加索引或重写查询。
7.
PostgreSQL 与连接池
- PostgreSQL: 编辑 postgresql.conf,shared_buffers ≈ 25% 内存,work_mem 根据查询复杂度增量设置,maintenance_work_mem 增大用于 VACUUM/ANALYZE。
- 连接池:使用 PgBouncer,设置 pool_mode = transaction,最大客户端连接数在 PgBouncer 上,后端数据库保持较少的 max_connections。
8.
内核与网络参数(sysctl)调整
- /etc/sysctl.conf 添加示例参数并 sudo sysctl -p:net.core.somaxconn=65535; net.core.netdev_max_backlog=250000; net.ipv4.tcp_max_syn_backlog=4096; net.ipv4.tcp_tw_reuse=1; net.ipv4.tcp_fin_timeout=15; net.ipv4.tcp_keepalive_time=300。
- 调整文件句柄:在 /etc/security/limits.conf 添加 * soft nofile 100000 和 * hard nofile 200000,重启会话生效。
- 使用 ss -s、netstat -an | grep SYN 来检查连接队列与TIME_WAIT数量。
9.
负载均衡与横向扩展
- 初期采用单台大机优化,流量增长后使用 Nginx 或 HAProxy 做 L4/L7 负载均衡并放在美国多个可用区。
- 静态用 CDN 负责,动态 API 层通过负载均衡分发到多台后端,数据库可用主从或读写分离,写入仍集中到主库,并用异步复制与复制延迟监控。
10.
压力测试与监控
- 压测工具:wrk、ab、siege、hey。逐步增加并发(从10到数千)并观察 CPU、内存、IO、网络带宽与响应码。示例:wrk -t12 -c400 -d60s https://your.domain/path。
- 监控方案:Prometheus + Grafana 或使用云监控。采集 Nginx、PHP-FPM、MySQL、Redis、系统指标,并设置告警(CPU>80%、IO wait>30%、慢查询突增)。
11.
安全与DDoS防护
- 最低权限原则、关闭不必要端口、使用 fail2ban/ufw 限制暴力登录、在边缘使用 Cloudflare/WAF 做DDoS缓解。
- Nginx 限流:limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; limit_conn_zone $binary_remote_addr zone=addr:10m; 配合 limit_req 和 limit_conn 限制单IP并发。
12.
优化流程示例(实操步骤)
- 步骤1:备份并建快照。步骤2:按照上文修改 sysctl.conf 并执行 sudo sysctl -p。步骤3:调整 Nginx 与 PHP-FPM 配置并重启服务。步骤4:配置 Redis 缓存与 Nginx FastCGI Cache 或 Varnish 并做小量缓存测试。
- 步骤5:调整数据库参数,重启数据库,导出慢查询并优化索引。步骤6:运行压力测试并监控,逐项定位瓶颈(CPU/IO/网络/DB)依次优化。
13.
问:在美国VPS上最先要做的三项优化是什么?
答:最先要做的是(1)系统层面调整:增加文件句柄、调整 sysctl TCP 参数并启用 epoll;(2)反向代理与缓存:配置 Nginx(或Varnish)并启用静态/动态缓存与CDN;(3)数据库基础调优:设置 InnoDB buffer pool(MySQL)或 shared_buffers(Postgres)并启用慢查询日志以便后续优化。
14.
问:如何判定是网络限制还是数据库成为瓶颈?
答:通过监控与压测判定:在压力测试时若 CPU/内存低但响应时间长且 tcp_queue 或 retransmissions 高,可能是网络问题;若 iowait 或数据库慢查询率高、db CPU 使用或锁等待增加,则是数据库瓶颈。使用 ss、iotop、mysqlslowlog、pt-query-digest 等工具定位。
15.
问:上线后如何持续维护高并发稳定性?
答:持续维护包括定期回放压力测试、监控指标并设置告警、定期更新索引与清理碎片、定时评估缓存命中率、对异常流量做规则限制并保持自动化部署与回滚方案(CI/CD + 快照)。
来源:高并发站点的美国vps优化策略含缓存、数据库与网络调优