基本概念
并发数
并发数指在同一个时间点,同时请求服务的客户数量
通常情况下指的是:如果同时有一万名用户访问网站,所有人都可以正常获得服务。而不会超时或连接拒绝情况发生。
吞吐率
吞吐率指的是服务处理请求的效率,计算方式为(总处理请求数/总耗时)
HTTP服务的吞吐率通常以RPS(Requests Per Second 请求数每秒)作为单位。吞吐量较高,代表服务处理效率就越高。换句话说就是网站的性能越高。
注意:吞吐率和并发数是两个完全独立的概念。拿银行柜台来举个例子,并发数指同时有多少人往银行柜台涌来。吞吐率则指银行柜台在一段时间内可以服务多少人。
但是在性能测试中,二者之间通常会呈现出一种关联关系。当并发数增大时,吞吐率通常也会随之上升(多用户发挥出并行处理优势)。但在并发数超过某个边界值后,吞吐率则会下降(用户过多,花在上下文切换的开销急剧增大,又或者内存消耗过多)。
响应时间
响应时间指的是用户从发出请求到接收完响应之间的总耗时,它由网络传输耗时、服务处理耗时等多个部分组成。通常以毫秒(ms)作为单位。
与并发数的关系:一般来说,随着并发数增大,单个用户的响应时间通常会随之增加。这很好理解,餐馆吃饭的人越多,单个顾客等待的时间就越长。
与吞吐率的关系:更高的吞吐率通常意味着更低的响应时间。因为吞吐率是以单位时间内的请求处理能力来计算的。
平均响应时间与百分位响应时间
平均响应时间指的是所有请求平均花费的时间,如果有100个请求,其中98个耗时为1ms,其他两个为100ms。那么平均响应时间为(98*1+2*100)/100.0=2.98ms。
百分位数(Percentile-Wikipedia)是一个统计学名词。以响应时间为例,99%的百分位响应时间,指的是99%的请求响应时间,都处在这个值以下。
拿上面的响应时间来说,其整体平均响应时间虽然为2.98ms,但99%的百分位响应时间却是100ms。
相对于平均响应时间来说,百分位响应时间通常更能反映服务的整体效率。现实世界中用的较多的是98%的百分位响应时间,比如GitHub System Status中就有一条98TH PERC.WEB RESPONSE TIME 曲线。
准备工作
1.挑选测试目标
一个网站通常有很多个不同的页面和接口。如果要完全模拟真实环境的访问,就得为各页面设置不同的权重,同时访问所有页面。或者取巧一点,采用重放真实环境访问记录的方式。
进行整体性能测试比较复杂,这里不打算介绍相关内容。这次主要讨论对单个页面测试。
那么,怎么挑选测试的目标页面呢?一般来说,哪些用户访问较多的页面通常是比较好的选择,他们可能是:
·首页/Landing Page:通常是用户第一个打开的页面
·关键行为页面:如果网站的主要功能是发放优惠券,那就测试发放优惠券的接口
·活动页面:新活动上线推广前,理所应当应该进行性能测试
尽量模拟真是用户情况
举个例子,如果你想压测一个文章列表页,那么一定先要挑选一位数量文章的用户,然后使用其身份来进行测试。千万不要用那些一篇文章没有、或只有少数文章的测试账号。那样会产生失真的测试结果,让你对服务能力产生过乐观的估计。
所以,在测试与用户相关的动态内容时,请细心挑选用户身份,尽量反映绝大多数用户的情况。
别忘了关注边界情况
让测试过程反映绝大多数用户的情况很重要,但也请别忘了那些边界情况。
比如,当用户拥有50篇以下的文章时,你的文章列表页面响应速度非常好,吞吐率非常高。那么如果某个用户拥有1000文章呢?列表页的性能表现还能满足需求吗?响应时间会不会呈指数级上升?这些都是你需要测试的。
牢记【木桶效应】,你的服务很可能会因为没有处理好这些边界情况而崩溃。
2.选择测试工具
市面上开源的HTTP性能测试工具非常多,我使用过得就有wrk、ab、vegeta、siege等。所有工具都支持对单个地址进行测试,部分工具支持通过地址列表批量测试。
除了ab这种历史比较悠久的工具,大部分现代压测工具效率都非常高,所以挑选那个区别不大。
3.
------------恢复内容开始------------
基本概念
并发数
并发数指在同一个时间点,同时请求服务的客户数量
通常情况下指的是:如果同时有一万名用户访问网站,所有人都可以正常获得服务。而不会超时或连接拒绝情况发生。
吞吐率
吞吐率指的是服务处理请求的效率,计算方式为(总处理请求数/总耗时)
HTTP服务的吞吐率通常以RPS(Requests Per Second 请求数每秒)作为单位。吞吐量较高,代表服务处理效率就越高。换句话说就是网站的性能越高。
注意:吞吐率和并发数是两个完全独立的概念。拿银行柜台来举个例子,并发数指同时有多少人往银行柜台涌来。吞吐率则指银行柜台在一段时间内可以服务多少人。
但是在性能测试中,二者之间通常会呈现出一种关联关系。当并发数增大时,吞吐率通常也会随之上升(多用户发挥出并行处理优势)。但在并发数超过某个边界值后,吞吐率则会下降(用户过多,花在上下文切换的开销急剧增大,又或者内存消耗过多)。
响应时间
响应时间指的是用户从发出请求到接收完响应之间的总耗时,它由网络传输耗时、服务处理耗时等多个部分组成。通常以毫秒(ms)作为单位。
与并发数的关系:一般来说,随着并发数增大,单个用户的响应时间通常会随之增加。这很好理解,餐馆吃饭的人越多,单个顾客等待的时间就越长。
与吞吐率的关系:更高的吞吐率通常意味着更低的响应时间。因为吞吐率是以单位时间内的请求处理能力来计算的。
平均响应时间与百分位响应时间
平均响应时间指的是所有请求平均花费的时间,如果有100个请求,其中98个耗时为1ms,其他两个为100ms。那么平均响应时间为(98*1+2*100)/100.0=2.98ms。
百分位数(Percentile-Wikipedia)是一个统计学名词。以响应时间为例,99%的百分位响应时间,指的是99%的请求响应时间,都处在这个值以下。
拿上面的响应时间来说,其整体平均响应时间虽然为2.98ms,但99%的百分位响应时间却是100ms。
相对于平均响应时间来说,百分位响应时间通常更能反映服务的整体效率。现实世界中用的较多的是98%的百分位响应时间,比如GitHub System Status中就有一条98TH PERC.WEB RESPONSE TIME 曲线。
准备工作
1.挑选测试目标
一个网站通常有很多个不同的页面和接口。如果要完全模拟真实环境的访问,就得为各页面设置不同的权重,同时访问所有页面。或者取巧一点,采用重放真实环境访问记录的方式。
进行整体性能测试比较复杂,这里不打算介绍相关内容。这次主要讨论对单个页面测试。
那么,怎么挑选测试的目标页面呢?一般来说,哪些用户访问较多的页面通常是比较好的选择,他们可能是:
·首页/Landing Page:通常是用户第一个打开的页面
·关键行为页面:如果网站的主要功能是发放优惠券,那就测试发放优惠券的接口
·活动页面:新活动上线推广前,理所应当应该进行性能测试
尽量模拟真是用户情况
举个例子,如果你想压测一个文章列表页,那么一定先要挑选一位数量文章的用户,然后使用其身份来进行测试。千万不要用那些一篇文章没有、或只有少数文章的测试账号。那样会产生失真的测试结果,让你对服务能力产生过乐观的估计。
所以,在测试与用户相关的动态内容时,请细心挑选用户身份,尽量反映绝大多数用户的情况。
别忘了关注边界情况
让测试过程反映绝大多数用户的情况很重要,但也请别忘了那些边界情况。
比如,当用户拥有50篇以下的文章时,你的文章列表页面响应速度非常好,吞吐率非常高。那么如果某个用户拥有1000文章呢?列表页的性能表现还能满足需求吗?响应时间会不会呈指数级上升?这些都是你需要测试的。
牢记【木桶效应】,你的服务很可能会因为没有处理好这些边界情况而崩溃。
2.选择测试工具
市面上开源的HTTP性能测试工具非常多,我使用过得就有wrk、ab、vegeta、siege等。所有工具都支持对单个地址进行测试,部分工具支持通过地址列表批量测试。
除了ab这种历史比较悠久的工具,大部分现代压测工具效率都非常高,所以挑选那个区别不大。
3.
------------恢复内容结束------------
浙公网安备 33010602011771号