测试方法论:
- 先测网站静态资源,如果有前端服务器(Apache,Nginx等)先测试 static files,测试静态文件得到的这个数据是一个上限,网站程序的动态请求不会比这更快了。
- 找近一点的地方测,减少由于网络 latency 导致不准确性。
- 不要用同一台 server 测试,虽然 CPU 不太会是问题,但是 I/O 可能会有影响。
- 总体可用性测试:测平均值和标准差
- 一般压力测试:Server 每秒可以承受多少 requests
测试工具:
1. 总体可用性测试:测平均值和标准差
测试的数据除了看平均值,更要看标准差跟计算信赖区间。基本的统计学告诉我们,相差平均一个标准差可以涵盖 68% 的资料,相差两个标准差就可以涵盖 95% 的资料。因此我们可以算出 95% 的信赖区间,也就是 95% 发出的 requests 中,可以在几秒到几秒内回应。
httperf --server example.com \
--port 80 \
--uri /path \
--num-conn 3000 \
--num-call 1 \
--timeout 5
--server
指定主机地址--port
指定主机端口--uri
指定测试的页面(相对路径)--num-conn
指定总共发多少个请求--num-call
指定每次连接发送的请求数(通常为1)--timeout
指定请求超时时间
测试输出结果 Reply rate 部分可以看到有平均和标准差。要注意的是 httperf 是每5秒抓一次样本(sample),根据 httperf 的建议是希望至少有 30 个样本数才能得到准确的标准差,因此当样本(sample)数太少的时候,需要把 –num-conns 往上加。
2. 一般压力测试:Server 每秒可以承受多少 requests
在之前的基础上,再加上 --rate 跟 --hog 參數:
httperf --server example.com \
--port 80 \
--uri /path \
--num-conn 3000 \
--num-call 1 \
--timeout 5
--rate 300 \
--hog
逐步把 --rate
往上调,直到 server 超过极限时,当有 requests 被 drop off 了,replies 就会减少并出现 Errors。
参考资料: