
- 操作系统:建议使用 Ubuntu 20.04 / CentOS 7+。
- 获取系统信息:sudo lsb_release -a;uname -r;free -h;df -h。
- 安装必要工具:sudo apt update && sudo apt install -y iperf3 fio sysbench htop net-tools curl wget unzip。
- 记录 VPS 基础配置:CPU 核数、内存大小、磁盘类型(SSD/NVMe)、带宽峰值、延迟到几个节点(ping)。示例命令:cat /proc/cpuinfo | grep processor -c;lsblk。
- 在本地机或另一台云主机做 iperf3 server:iperf3 -s。
- 在 VPS 上作为 client:iperf3 -c SERVER_IP -P 10 -t 30 -R(-R 测试从服务器到客户端方向)。解释:-P 并发流数,-t 测试秒数。
- ping + mtr:ping -c 10 SERVER_IP;mtr -r -c 50 SERVER_IP,用于查看丢包与路由。
- 结果解读:带宽低可能是上游链路或端口限速,丢包高说明链路不稳定需换机房或运营商。
- 简单顺序写读测:sudo dd if=/dev/zero of=/root/testfile bs=1M count=1024 oflag=direct;sudo dd if=/root/testfile of=/dev/null bs=1M iflag=direct。
- 更精确用 fio:sudo fio --name=randread --ioengine=libaio --direct=1 --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=60 --group_reporting。改为 rw=randwrite 或 rw=readwrite。
- 观察 IOPS、延迟(latency)和带宽。SSD/NVMe 延迟应 <1ms,SATA 可能更高。根据结果决定是否开启缓存或使用 RAID/更换磁盘类型。
- CPU 计算测试:sysbench cpu --threads=4 --time=60 run。观察每秒事件数与延迟。
- MySQL 常用测试(需安装 mysql-server 并初始化):sysbench oltp_read_write --db-driver=mysql --mysql-user=root --mysql-password=密码 --tables=10 --table-size=100000 prepare,然后 run。
- 根据 CPU 与 DB 性能调整线程数与缓存大小(见后面的 MySQL 建议)。
- 安装并测试静态页面:nginx 配置默认页面。
- 使用 wrk:wrk -t4 -c200 -d30s http://VPS_IP/;参数解释:线程数、并发连接数、持续时间。
- 使用 ab:ab -n 10000 -c 200 http://VPS_IP/。观察请求成功率、平均响应时间与 5xx 错误。
- 若出现连接耗尽或超时,需调大 nginx worker_connections、ulimit、sysctl 网络参数。
- 临时调整示例(sudo 执行):sudo sysctl -w net.core.somaxconn=65535;sudo sysctl -w net.ipv4.tcp_tw_reuse=1;sudo sysctl -w net.ipv4.tcp_fin_timeout=15;sudo sysctl -w net.ipv4.tcp_max_syn_backlog=4096。
- 永久写入 /etc/sysctl.conf:追加上述项并执行 sudo sysctl -p。
- 调整文件句柄:echo "fs.file-max = 200000" | sudo tee -a /etc/sysctl.conf;ulimit -n 100000(写入 /etc/security/limits.conf 做持久化)。
- Nginx 基本:worker_processes auto;worker_connections 4096;keepalive_timeout 15;sendfile on;tcp_nopush on。
- PHP-FPM:pm = dynamic;pm.max_children 根据内存计算((内存 - 缓存/OS) / 单个 PHP 进程占用)。
- MySQL(InnoDB):innodb_buffer_pool_size = 70%-80% 可用内存;innodb_log_file_size 按写压力设为 512M;max_connections 设为实际并发+缓冲。重启 MySQL 后观察性能。
- 小博客/企业官网:1 CPU、1-2GB 内存即可。Nginx + PHP-FPM,启用缓存(FastCGI cache),keepalive。MySQL 使用小内存配置,innodb_buffer_pool_size = 512M 或更低。
- 中小电商:2-4 CPU、4-8GB 内存。Nginx 反向代理 + PHP-FPM 池化,Redis 缓存会话与热点缓存,MySQL innodb_buffer_pool_size 60%-70% 内存,慢查询日志开启并优化索引。
- 流媒体/文件分发:优先选择高带宽 NVMe 磁盘,多线程上传下载优化,使用 chunked、CDN 层(Cloudflare/阿里云 CDN)减轻源站带宽压力。
- 游戏/实时应用:低延迟优先,选择延迟低的机房,加强 TCP 拥塞控制(bbr 可选),增加 CPU 与内存,关闭不必要的后台进程。
- 部署监控:安装 netdata 或 Prometheus + Grafana,监控 CPU、内存、disk IO、network。
- 自动化压力测试:写脚本定时跑 wrk/iperf3 并记录结果到文件,便于趋势分析。
- 回退方案:测试新调优前先备份配置文件(cp /etc/nginx/nginx.conf /root/nginx.conf.bak),出现问题可快速恢复并重启服务。
答:网络带宽与链路稳定性是最常见瓶颈,其次是磁盘 IO(尤其是高并发写入)和内存不足导致的频繁交换。针对这些问题,优先排查 iperf3、mtr、fio 结果,必要时升级带宽或更换 NVMe 磁盘并调整内核网络参数。
11.答:启用 HTTP 缓存(Nginx FastCGI/Proxy cache)、启用 gzip/ brotli 压缩、使用 CDN 缓解静态资源流量、通过缓存与异步任务减少峰值请求对后端的冲击。这些措施不需要更换 VPS 即可显著降低带宽压力。
12.答:关键是保证数据库与缓存性能:设置 innodb_buffer_pool_size 占可用内存的 60-75%,部署 Redis 作为热点缓存,定期运行 sysbench 与慢查询分析(EXPLAIN 优化大查询),并用 wrk 做并发压测模拟真实流量,最后结合监控观察瓶颈位置并横向扩展或升级实例。