k6中的sleep函数会暂停所有虚拟用户的执行还是只能暂停一个用户的执行?

7

我刚接触使用 https://k6.io 进行负载测试,想了解 sleep 函数的行为。

目前我已经建立了一个包含多个阶段的负载测试。在默认函数中,我有一些执行的请求(get和post)。

我注意到,如果我只是按顺序执行这些请求几分钟,我的应用程序(运行在弹性豆荚上)就开始变慢,并最终抛出 500 错误。

但是,如果我在每个请求后面添加一个 sleep 语句,如下所示:


const getMe = http.get(`${appEndpoint}/me`, params)
check(getMe, {
  'me: status was 200': r => r.status == 200,
  'me: response time OK (under 500ms)': r => r.timings.duration < maxResponseTimeMs,
  });

sleep(Math.floor(Math.random() * 4) + 1)

// next request would follow below

我可以轻松地将虚拟用户的数量增加10倍而不会出现任何问题。

所以我的问题是:

sleep是导致k6暂停所有虚拟用户的所有请求还是仅暂停一个虚拟用户的请求。

据我理解,虚拟用户本质上只是运行负载测试的default函数的并行执行,那么整个函数是否会为所有用户暂停,还是基于每个用户暂停。

在文档中找不到相关信息,请指点!

谢谢

1个回答

5

sleep函数会暂停当前虚拟用户的执行,而不是所有虚拟用户的请求。

由于虚拟用户(VU)并行且相互隔离地执行default函数,因此sleep()函数仅会暂停该VU的执行。

由于在迭代之间随机睡眠1-4秒,因此您的服务器可能能够应对随机化的流量,而快速发送请求将导致减速和500错误。在测试期间,您将发现系统的正确平衡以及适合您的最佳选择。

正是因为这个原因,这种sleep()技术非常有用,以便您可以控制发送的请求数量。还可以查看--rps选项


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接