a70d0081607081471df4db435641b51a.jpg

如何描述一个Web应用的性能模型,简单来说,应该是 PV(PageView) + RT(Response
Time)。一般我们经常会看到一些网站发布数据说,我们的网站一天的PV是多少多少,这其实就就是一个很直观的性能数据。

PV 其实说的就是业务量:你的系统在可接受的 RT 内,所承受的 PV 就是系统的处理能力;当然我们更关注的是单位时间内的 PV,比如每秒的
PV,这代表你系统所能承受的并发能力;

我一贯的观点是,压力测试更多的是发现潜在的问题,其实没有办法告诉你他能支撑多大的业务量;这其中主要的问题在于业务的快速变化和用户行为的不可预知。增加服务器一般就是处理能力不够了,比如
cpu 繁忙,io 繁忙;

当然很多时候,业务系统的扩展性决定了你的应用是不是能通过增加服务器的方式提高处理能力;更多的是要找到问题,对症下药。

下面介绍两款免费的压力测试软件:

ab

ab 测试工具是 Apache 提供的一款测试工具,具有简单易上手的特点,在测试 Web 服务时非常实用。

ab 可以在 Windows 系统中使用,也可以在 Linux 系统中使用。这里我说下在 Linux 系统中的安装方法,非常简单,只需要在 Linux 系统中输入 yum-y install httpd-tools 命令,就可以了。

安装成功后,输入 ab 命令,可以看到以下提示:

ab.jpg

ab 工具用来测试 post get 接口请求非常便捷,可以通过参数指定请求数、并发数、请求参数等。

例如,一个测试并发用户数为 10、请求数量为 100 的的 post 请求输入如下:

ab -n 100  -c 10 -p 'post.txt' -T 'application/x-www-form-urlencoded' 'http://test.api.com/test/register'

post.txt 为存放 post 参数的文档,存储格式如下:

usernanme=test&password=test&sex=1

附上几个常用参数的含义:

-n:总请求次数(最小默认为 1);
-c:并发次数(最小默认为 1 且不能大于总请求次数,例如:10 个请求,10 个并发,实际就是 1 人请求 1 次);
-p:post 参数文档路径(-p 和 -T 参数要配合使用);
-T:header 头内容类型(此处切记是大写英文字母 T)。

当我们测试一个 get 请求接口时,可以直接在链接的后面带上请求的参数:

ab -c 10 -n 100 http://www.test.api.com/test/login?userName=test&password=test

输出中,有几项性能指标可以提供给我们参考使用:

  • Requests per second:吞吐率,指某个并发用户数下单位时间内处理的请求数;
  • Time per request:上面的是用户平均请求等待时间,指处理完成所有请求数所花费的时间 /(总请求数 / 并发用户数);
  • Time per request:下面的是服务器平均请求处理时间,指处理完成所有请求数所花费的时间 / 总请求数;
  • Percentage of the requests served within a certain time:每秒请求时间分布情况,指在整个请求中,每个请求的时间长度的分布情况,例如有 50% 的请求响应在 8ms 内,66% 的请求响应在 10ms 内,说明有 16% 的请求在 8ms~10ms 之间。

JMeter

6ffe85677e50bb75152d45526a7ba667.png

该工具使用方法很多地方都有介绍,此处不在赘述。

使用方法:https://zhuanlan.zhihu.com/p/36526346
官网:https://jmeter.apache.org/

发表评论