From 5e71c623430e6a2b22c5da725a13f5d0957856b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=9A=E5=9B=BD=E7=8E=AE?= Date: Wed, 6 Sep 2023 09:46:07 +0800 Subject: [PATCH] =?UTF-8?q?docs(README.md):=20=E7=BB=9F=E4=B8=80=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E3=80=81=E4=BF=AE=E6=94=B9=20PV=20=E5=92=8C=20UV=20?= =?UTF-8?q?=E7=9A=84=E8=A7=A3=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本次提交主要修改的详细描述如下。目的是为了使文章看起来更加整洁。 1. 除了 `(` 和 `)` 符号,其余部分均采用中文全角符。这样统一了全文的符号风格 2. 英文前后添加空格 3. PV 和 UV 解释中,添加了特定的时间范围,实际上是不限特定时间范围的,增加描述的准确性 4. QPS、UV、PV 名词描述的英文,修改为复数形式 --- README.md | 56 +++++++++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 7eef261..374bff8 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ - 单台机器对 HTTP 短连接 QPS 1W+ 的压测实战 - 单台机器 100W 长连接的压测实战 - 对 grpc 接口进行压测 -- 支持http1.1和2.0长连接 +- 支持 http1.1 和 2.0 长连接 > 简单扩展即可支持 私有协议 ## 目录 @@ -70,7 +70,7 @@ go 实现的压测工具,每个用户用一个协程的方式模拟,最大 ```shell -# 运行 以mac为示例 +# 运行以 mac 为示例 ./go-stress-testing-mac -c 1 -n 100 -u https://www.baidu.com/ ``` @@ -119,7 +119,7 @@ go 实现的压测工具,每个用户用一个协程的方式模拟,最大 **失败数**: 压测中,请求失败的数量 -**qps**: 当前压测的QPS(每秒钟处理请求数量) +**qps**: 当前压测的 QPS (每秒钟处理请求数量) **最长耗时**: 压测中,单个请求最长的响应时长 @@ -127,7 +127,7 @@ go 实现的压测工具,每个用户用一个协程的方式模拟,最大 **平均耗时**: 压测中,单个请求平均的响应时长 -**错误码**: 压测中,接口返回的 code码:返回次数的集合 +**错误码**: 压测中,接口返回的 code 码:返回次数的集合 ## 2、压测 ### 2.1 压测是什么 @@ -138,17 +138,17 @@ go 实现的压测工具,每个用户用一个协程的方式模拟,最大 ### 2.2 为什么要压测 -- 压测的目的就是通过压测(模拟真实用户的行为),测算出机器的性能(单台机器的QPS),从而推算出系统在承受指定用户数(100W)时,需要多少机器能支撑得住 +- 压测的目的就是通过压测(模拟真实用户的行为),测算出机器的性能(单台机器的 QPS),从而推算出系统在承受指定用户数(100W)时,需要多少机器能支撑得住 - 压测是在上线前为了应对未来可能达到的用户数量的一次预估(提前演练),压测以后通过优化程序的性能或准备充足的机器,来保证用户的体验。 ### 2.3 压测名词解释 #### 2.3.1 压测类型解释 -| 压测类型 | 解释 | -| :---- | :---- | -| 压力测试(Stress Testing) | 也称之为强度测试,测试一个系统的最大抗压能力,在强负载(大数据、高并发)的情况下,测试系统所能承受的最大压力,预估系统的瓶颈 | -| 并发测试(Concurrency Testing) | 通过模拟很多用户同一时刻访问系统或对系统某一个功能进行操作,来测试系统的性能,从中发现问题(并发读写、线程控制、资源争抢) | -| 耐久性测试(Configuration Testing) | 通过对系统在大负荷的条件下长时间运行,测试系统、机器的长时间运行下的状况,从中发现问题(内存泄漏、数据库连接池不释放、资源不回收) | +| 压测类型 | 解释 | +| :---- |:------------------------------------------------------------------| +| 压力测试(Stress Testing) | 也称之为强度测试,测试一个系统的最大抗压能力,在强负载(大数据、高并发)的情况下,测试系统所能承受的最大压力,预估系统的瓶颈 | +| 并发测试(Concurrency Testing) | 通过模拟很多用户同一时刻访问系统或对系统某一个功能进行操作,来测试系统的性能,从中发现问题(并发读写、线程控制、资源争抢) | +| 耐久性测试(Configuration Testing) | 通过对系统在大负荷的条件下长时间运行,测试系统、机器的长时间运行下的状况,从中发现问题(内存泄漏、数据库连接池不释放、资源不回收) | #### 2.3.2 压测名词解释 @@ -157,7 +157,7 @@ go 实现的压测工具,每个用户用一个协程的方式模拟,最大 | :---- | :---- | | 并发(Concurrency) | 指一个处理器同时处理多个任务的能力(逻辑上处理的能力) | | 并行(Parallel) | 多个处理器或者是多核的处理器同时处理多个不同的任务(物理上同时执行) | -| QPS(每秒钟查询数量 Query Per Second) | 服务器每秒钟处理请求数量 (req/sec 请求数/秒 一段时间内总请求数/请求时间) | +| QPS(每秒钟查询数量 Queries Per Second) | 服务器每秒钟处理请求数量 (req/sec 请求数/秒 一段时间内总请求数/请求时间) | | 事务(Transactions) | 是用户一次或者是几次请求的集合 | | TPS(每秒钟处理事务数量 Transaction Per Second) | 服务器每秒钟处理事务数量(一个事务可能包括多个请求) | | 请求成功数(Request Success Number) | 在一次压测中,请求成功的数量 | @@ -169,32 +169,32 @@ go 实现的压测工具,每个用户用一个协程的方式模拟,最大 #### 2.3.3 机器性能指标解释 -| 机器性能 | 解释 | -| :---- | :---- | -| CPU利用率(CPU Usage) | CPU 利用率分用户态、系统态和空闲态,CPU利用率是指:CPU执行非系统空闲进程的时间与CPU总执行时间的比率 | -| 内存使用率(Memory usage) | 内存使用率指的是此进程所开销的内存。 | -| IO(Disk input/ output) | 磁盘的读写包速率 | -| 网卡负载(Network Load) | 网卡的进出带宽,包量 | +| 机器性能 | 解释 | +| :---- |:-------------------------------------------------------------| +| CPU利用率(CPU Usage) | CPU 利用率分用户态、系统态和空闲态,CPU 利用率是指:CPU 执行非系统空闲进程的时间与 CPU 总执行时间的比率 | +| 内存使用率(Memory usage) | 内存使用率指的是此进程所开销的内存 | +| IO(Disk input/ output) | 磁盘的读写包速率 | +| 网卡负载(Network Load) | 网卡的进出带宽,包量 | #### 2.3.4 访问指标解释 -| 访问 | 解释 | -| :---- | :---- | -| PV(页面浏览量 Page View) | 用户每打开1个网站页面,记录1个PV。用户多次打开同一页面,PV值累计多次 | -| UV(网站独立访客 Unique Visitor) | 通过互联网访问、流量网站的自然人。1天内相同访客多次访问网站,只计算为1个独立访客 | +| 访问 | 解释 | +| :---- |:---------------------------------------------------------------------------| +| PV(页面浏览量 Page Views) | 一定时间范围内(时间范围可以是一天、一个月等自定义的时间段),用户每打开 1 个网站页面,记录 1 个 PV。用户多次打开同一页面,PV 值累计多次 | +| UV(网站独立访客 Unique Visitors) | 一定时间范围内(时间范围可以是一天、一个月等自定义的时间段),通过互联网访问、流量网站的自然人。相同访客多次访问网站,只计算为 1 个独立访客 | ### 2.4 如何计算压测指标 -- 压测我们需要有目的性的压测,这次压测我们需要达到什么目标(如:单台机器的性能为 100QPS?网站能同时满足100W人同时在线) -- 可以通过以下计算方法来进行计算: -- 压测原则:每天80%的访问量集中在20%的时间里,这20%的时间就叫做峰值 -- 公式: ( 总PV数`*`80% ) / ( 每天的秒数`*`20% ) = 峰值时间每秒钟请求数(QPS) -- 机器: 峰值时间每秒钟请求数(QPS) / 单台机器的QPS = 需要的机器的数量 +- 压测我们需要有目的性的压测,这次压测我们需要达到什么目标(如:单台机器的性能为 100 QPS ?网站能同时满足 100W 人同时在线) +- 可以通过以下计算方法来进行计算: +- 压测原则:每天 80% 的访问量集中在20%的时间里,这 20% 的时间就叫做峰值 +- 公式:( 总PV数`*`80% ) / ( 每天的秒数`*`20% ) = 峰值时间每秒钟请求数(QPS) +- 机器:峰值时间每秒钟请求数(QPS) / 单台机器的QPS = 需要的机器的数量 -- 假设:网站每天的用户数(100W),每天的用户的访问量约为3000W PV,这台机器的需要多少QPS? +- 假设:网站每天的用户数(100W),每天的用户的访问量约为 3000W PV,这台机器的需要多少 QPS ? > ( 30000000\*0.8 ) / (86400 * 0.2) ≈ 1389 (QPS) -- 假设:单台机器的的QPS是69,需要需要多少台机器来支撑? +- 假设:单台机器的的 QPS 是 69,需要需要多少台机器来支撑? > 1389 / 69 ≈ 20 ## 3、常见的压测工具