1. 环境准备与前提
- 选择带CN2线路的日本VPS(推荐带BGP或CN2 GT/线路),系统选Ubuntu 20.04或Debian 11。
- 购买后记录公网IP、登录方式(root/SSH key)、带宽与带宽峰值。
- 事先准备域名并在DNS控制台绑定A记录到VPS,建议TTL短(60-300s)方便切换。
2. 基础操作系统与安全初始化
- 登录并更新系统:apt update && apt upgrade -y。
- 建立新用户并禁止root远程登录:adduser deploy && usermod -aG sudo deploy;编辑 /etc/ssh/sshd_config 禁用 PermitRootLogin yes,重启sshd。
- 启用防火墙:ufw default deny incoming; ufw allow OpenSSH; ufw allow http; ufw allow https; ufw enable。
3. 安装Web栈(NGINX + PHP-FPM + MariaDB)
- 安装Nginx与PHP:apt install nginx php-fpm php-mysql -y。
- 安装MariaDB:apt install mariadb-server -y;执行 mysql_secure_installation 做初步加固。
- 配置站点目录 /var/www/activity 并设置权限 chown -R www-data:www-data /var/www/activity。
4. Nginx高并发配置关键项
- 编辑 /etc/nginx/nginx.conf:worker_processes auto; worker_connections 10240; use epoll; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 15; client_max_body_size 50m。
- 在site配置启用 gzip、expires、fastcgi_cache(后续配置缓存目录 /var/cache/nginx/fastcgi_cache)并设置 proxy_buffer_size 合理。
5. PHP-FPM与资源限制
- 编辑 /etc/php/7.x/fpm/pool.d/www.conf:pm = dynamic;计算 pm.max_children = 内存可用 / 单个php-fpm进程占用(例如512MB可支持约10进程),pm.start_servers/pm.min_spare/pm.max_spare 调整为峰值负载。
- 增大 ulimit 和文件句柄:在 /etc/security/limits.conf 添加 www-data soft nofile 65536 等,并调整 systemd 服务文件 LimitNOFILE。
6. MariaDB(MySQL)性能调优
- 基本my.cnf调整:innodb_buffer_pool_size 设置为物理内存的50%-75%;innodb_flush_log_at_trx_commit = 2(在可容忍少量RPO场景下);max_connections 根据并发预估(例如500)调整;设置 query_cache_type=0。
- 创建慢查询日志并使用pt-query-digest或mysqldumpslow分析慢查找点。
7. 使用Redis/缓存与静态加速
- 安装Redis并用于会话及热点数据缓存:apt install redis-server。
- 在应用层实现页面片段缓存、计算结果缓存,并用Nginx fastcgi_cache缓存无登录或活动页的可缓存接口。
- 将静态资源(图片、JS、CSS)托管到独立子域并使用长缓存头、CDN加速。
8. TCP与内核网络调优
- 在 /etc/sysctl.conf 添加:net.core.somaxconn=65535; net.ipv4.tcp_tw_reuse=1; net.ipv4.tcp_fin_timeout=30; net.ipv4.tcp_max_syn_backlog=4096; fs.file-max=2097152。执行 sysctl -p 生效。
- 增加 epoll 文件描述符、调高系统打开文件数以支持高并发连接。
9. 压测工具与测试脚本
- 常用工具:wrk、ab、siege。安装:apt install wrk。
- 示例wr k命令:wrk -t12 -c1000 -d60s --timeout 8s http://your-domain/path。先对静态页面压测,再对带PHP后端接口压测,记录RPS、Latency、95/99百分位。
- 用ab进行并发逐步上升:ab -n 10000 -c 100 http://your-domain/。
10. 并发测试策略与瓶颈排查
- 分步骤:先网络到VPS延迟与带宽测试(ping、iperf3),再测试Nginx静态吞吐,最后打开PHP逻辑与DB交互。
- 若发现95%延迟高,使用 top / htop / iostat / vmstat / netstat -antp 查CPU、IO、内存、连接数。用 ss -s 看socket状况,使用 slow query 与 redis-cli monitor 定位DB或缓存瓶颈。
11. 稳定性与高可用设计
- 建议采用多节点+负载均衡(例如AWS ELB或自托管HAProxy)并用健康检查。
- 使用CDN(Cloudflare/阿里云CDN)降低源站压力,开启WAF防刷和rate limiting以保护活动接口。
12. 监控与告警部署
- 部署Prometheus + node_exporter + Alertmanager或Netdata实现实时监控。
- 设置告警阈值:CPU>80%、内存>80%、磁盘IO高、95%延迟>2s、错误率>1% 等并配置短信/微信告警。
13. 发布与回滚流程(灰度与限流)
- 活动上线采用蓝绿或灰度发布,先对10%流量逐步扩展。
- 在应用层实现限流(漏桶/令牌桶)及熔断,遇到DB高负载时切换只读或开启降级页面。
14. CN2日本线路的特殊注意
- CN2节点对国内用户延迟通常更优,但需要测试到目标用户的真实延迟,使用从国内不同机房发起ping/traceroute或使用国内压测点做A/B对比。
- 注意带宽峰值计费与运营商BGP策略,必要时与VPS提供商确认端口带宽突发能力与抗DDoS保护。
问:在vps cn2 日本做压测是否需要在国内发起?
答:
推荐从代表性国内节点发起压测以获得真实用户体验数据:可以用阿里云压测点或自建多台国内临时机器做 wrk/ab 测试,另外对比海外节点结果判断线路差异。
问:并发数如何估算PHP-FPM的pm.max_children?
答:
用内存计算:pm.max_children ≈ 可用内存(分配给PHP)/ 单个PHP进程平均内存(可用ps aux --sort -rss|grep php统计),并留出系统与数据库缓冲。
问:发现瓶颈是数据库,临时活动当天如何应急处理?
答:
可立即开启只读缓存页面、增加Redis缓存、降低DB写同步频率(批量写或延迟队列)、临时降级非关键功能并横向扩容DB读节点或切换到更高规格实例。
来源:搭建电商活动站点时使用vps cn2日本 的并发与稳定性实测