1.
概述与目标定义
开始前明确测试目标:并发请求数(RPS)、95/99百分位响应时间、错误率、CPU/内存/网络/磁盘使用上限、持续稳定运行时间(例如持续2小时无异常)。记录服务器规格(CPU、内存、带宽、硬盘类型与IOPS)与网络链路(公网带宽、延迟)。
2.
环境准备(服务器与网络)
在菲律宾机房确认机型并完成系统安装。Linux常用做法:apt(Debian/Ubuntu)或yum(CentOS)。示例命令:apt update && apt install -y git curl nginx docker.io docker-compose。配置防火墙开放测试端口(例如80/443、监控端口9100)并关闭不必要服务。确认时钟同步:apt install -y chrony && systemctl enable --now chronyd。
3.
部署应用的实际步骤
传代码:使用git clone或rsync -avz。若使用Docker:编写docker-compose.yml并 docker-compose up -d。非容器化部署:配置systemd单元文件,例:/etc/systemd/system/myapp.service,写好ExecStart并 systemctl daemon-reload && systemctl start myapp。验证服务启动:curl -I http://localhost:端口。
4.
基线性能指标设定
制定基线:空载延迟、单用户响应平均值、并发50/100/500下响应时间及资源占用。举例目标:RPS 1000,p95 < 300ms,错误率 < 0.5%,CPU < 70%,内存 < 80%。把这些写进测试计划,后续验收以此对比。
5.
压力测试工具选择与安装
常用工具:k6(脚本化、云友好)、wrk(轻量)、Apache JMeter(功能全、GUI)、locust(Python脚本化)。安装示例:k6 在Debian上curl -sS https://dl.k6.io/key.gpg | apt-key add - && echo "deb https://dl.k6.io/deb stable main" > /etc/apt/sources.list.d/k6.list && apt update && apt install -y k6。
6.
编写压力测试脚本(示例:k6)
示例k6脚本(保存为test.js):
export let options = {vus:100, duration:'5m', rps:1000};
import http from 'k6/http';
export default function(){ let res = http.get('https://yourdomain/path'); if(res.status!=200){console.log('err',res.status);} }
使用命令运行:k6 run test.js。对于JMeter,用CSV数据参数化并设置线程组(ramp-up、循环次数)。
7.
实际执行压力测试步骤
步骤:1) 预热(10-20%目标负载10分钟);2) 逐步爬升(每5分钟增加10-20%直到目标);3) 稳态阶段(目标负载下运行30~120分钟);4) 降载并收集最终日志。命令示例(wrk):wrk -t12 -c400 -d10m --latency http://yourdomain/。多机压测时在控制端记录时间并同时触发。
8.
监控与指标采集(服务器端)
同时在被测服务器运行监控:安装node_exporter并接Prometheus,或最简单采集命令:top -b -n1 > top.log;sar -u 1 60 > sar_cpu.log;iostat -xm 5 12 > iostat.log;iftop或nethogs查看网络。将nginx、应用日志和慢查询日志(数据库)同步到集中位置。
9.
错误与瓶颈定位方法
分析流程:1) 先看错误率与响应码分布;2) 查看CPU/IO/Net对应时间点的峰值;3) 若CPU高,定位进程并使用strace/top/htop;4) 若IO高,使用iostat、iotop,检查swap;5) 若网络瓶颈,用tcpdump查看重传,iftop查看带宽饱和。对JVM应用,采集GC日志并用GC分析工具。
10.
性能调优与复测实操
根据瓶颈做改动:nginx增加worker_connections并调keepalive_timeout;调整数据库索引和连接池;启用缓存(Redis、HTTP Cache);垂直/水平扩容实例或开启负载均衡;修改系统调优参数:sysctl -w net.core.somaxconn=1024;修改后重启服务并重复第7步的测试。
11.
验收标准与测试报告撰写
编写报告包含:测试环境(机房/带宽/规格)、工具与脚本、测试流程、关键图表(TPS、p50/p95/p99、CPU/内存/网络时间序列)、问题与建议。明确验收结论:例如“在
菲律宾服务器上,持续2小时RPS=1000,p95<300ms,错误率0.1%,验收通过”。
12.
问:如果本地发起压测,如何避免带宽成为瓶颈?
答:使用分布式压测,把压测机放在不同地区或同一机房多台机器,每台限定rps,或使用云压测服务。验证:在压测端监控出口带宽(iftop)并确保总出网带宽大于目标流量(估算平均每请求字节数*RPS)。
13.
问:如何保证压测结果的可重复性与可靠性?
答:固定环境(同一镜像、同一机器规格)、版本控制测试脚本、记录网络抖动与外部依赖状态、做多次测试取中位数并保留原始日志。避免在生产时间窗口跑测试,或者使用预生产环境仿真生产流量。
14.
问:压测导致服务宕机,如何快速恢复并避免再次发生?
答:先立刻停止压测工具;若是进程崩溃,使用systemctl restart或docker-compose up -d快速恢复;排查日志确定原因并临时放宽流量(调整负载均衡或DNS权重);长期策略:做容量预留、加入熔断限流(nginx limit_req、服务端限流)、健壮的自动扩容策略和逐步爬升的测试计划。
来源:性能验证 租用菲律宾服务器部署 后如何进行压力测试与验收