k6:增加VU数量的每个阶段如何管理rps-limit
Posted
技术标签:
【中文标题】k6:增加VU数量的每个阶段如何管理rps-limit【英文标题】:k6: how to manage rps-limit on each stage of increase the number of VUs 【发布时间】:2019-11-10 10:41:40 【问题描述】:我有一个关于基本术语的问题,但没有找到详细的解释。输入数据:framework k6 v0.25.1,http-requests。
问题一:从什么角度看VU(虚拟用户)的实现:
1) 客户端;
2) 服务器端;
3) 客户端-服务器的交互?
关于 VU 精髓的精妙之处,您应该阅读哪些内容,尤其是在 k6 中? 现在我发现每个 VU 在客户端和服务器端占用一个网络端口。
加载配置文件:
1) rps:1; vus:1; N 分钟的持续时间——我在 Grafana 中看到请求数量的增加非常少:+~1rps。一切都很好;
2) rps:1; vus:1..1000 在 N 分钟内通过 stages
中的选项 target
加速 - 我看到负载在峰值增加了 ~+100rps,尽管根据 k6 documentation 的选项“rps”是“最大每秒发出的请求数,所有 VU 的总请求数”选项,即不是 ~+100rps,我希望看到负载在 ~1rps,与经验 #1 类比
— 即 rps 限制错误的 k6 错误不会在所有 VU 线程中占用 rps 数量,或者每个 VU 存在所需的 VU 的隐藏合法行为。
注意:我在场景开始和结束时设置了一个任意超时以实现负载分布均匀。
问题 #2:增加 vus 时非法超过 rps 限制的 rps 惊人增长的原因是什么?
例子:
import http from "k6/http";
export let options =
stages: [
duration: "1m", target: 1, rps: 1 ,
duration: "1m", target: 200, rps: 1 ,
duration: "1m", target: 500, rps: 1 ,
duration: "1m", target: 1000, rps: 1 ,
duration: "1m", target: 500, rps: 1 ,
duration: "1m", target: 200, rps: 1 ,
duration: "1m", target: 1, rps: 1 ,
]
;
export default function()
http.get("https://httpbin.test.loadimpact.com/get");
console.log("request made by VU " + __VU);
;
【问题讨论】:
【参考方案1】:Virtual User
或VU
是k6
的具体定义和实现。 VU
是执行您的脚本,向您的服务器发出一个或多个 HTTP 请求的实体。
如果你正在测试一个网络服务器,你可以认为VU
和真实用户是一样的。
如果您正在测试 API,VU
每秒向服务器发出的请求数 (RPS) 比您真正的 VUs
多。示例您可以定义 5 个 VU,但每个 VU 每秒可以产生 10 个请求。这就是为什么当您的 VU 增加时,您可以很快达到 RPS 限制。
您可以在link 阅读有关 VU 定义的更多详细信息。
【讨论】:
来自 k6 的文档:“选项rps
:每秒发出的最大请求数,所有 VU 的总数”,但实际上 rps 限制被忽略了。我想知道为什么。
@fpsthirty,我尝试重现您的问题,但我不能。您可以添加更多详细信息吗?我尝试了以下简单的脚本,它按预期工作:import http from "k6/http";
export let options = vus: 1000, duration: "60s", rps: 1;
export default function () http.get("https://httpbin.test.loadimpact.com/get"); console.log("request made by VU " + __VU);
@na--,对不起,例子在这里:gist.github.com/fpsthirty/db548692cc2b9832abd78d8f450e4244我使用stages
通过选项target
平滑增加VU的数量
好吧,那是你的问题 - rps
在 stages
中使用时没有任何意义,它是一个全局选项,所以它应该在 options
根目录中。
@na--,是的,你是对的。我在路线图 v1.0.0 github.com/loadimpact/k6/issues/550 的类似功能的主题中看到了您的 cmets。根据当前情况,我将解决方案视为带有命令行标志的顺序启动。例如:k6 run --rps 10 --vus 50 filename.js && k6 run --rps 100 --vus 500 filename.js
。但也许你有更好的主意?我很高兴听到您的意见作为结束这个话题的新答案以上是关于k6:增加VU数量的每个阶段如何管理rps-limit的主要内容,如果未能解决你的问题,请参考以下文章
使用 K6 - 3000 VU 轰炸 AWS EC2。连接开始超时,现在我无法通过 SSL 或 HTTP 请求连接到实例。这是啥?