网站压力测试有什么方法论和工具推荐?

对压力测试的概念很模糊,需要测试哪些性能指标和工具也不是很了解,一个答案也未必能讲清楚,能推荐一下这方面的书籍或者博客吗?

阅读 8.9k
2 个回答

测试方法论:

  • 先测网站静态资源,如果有前端服务器(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 參數:

  • --rate 指定每秒执行多少个请求数
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。

参考资料:

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏