k6 VU(虚拟用户)有多少内存? [关闭]

Posted

技术标签:

【中文标题】k6 VU(虚拟用户)有多少内存? [关闭]【英文标题】:How much memory for k6 VU (Virtual User)? [closed] 【发布时间】:2019-01-15 17:43:26 【问题描述】:

k6 中的 VU(虚拟用户)使用了多少内存?

VU 的内存使用量是否线性扩展,即如果 1 个 VU 使用 X KB,那么 100 个 VU 是否使用 100 * X KB?

【问题讨论】:

【参考方案1】:

VU 占用多少内存在很大程度上取决于您的脚本的作用以及(通常更重要的是)它导入/解析的其他文件的数量。由于所有 VU 都有自己的 JS VM,因此它们是所有需要解析的 JS 文件的单独副本。因此,如果您有一些大型 JS 库,它将在 VU 之间复制,并且可能占您内存使用的大部分。如果您的脚本也有一些包含大量测试数据的大文件 - 它们也会被复制等等。根据我的经验,简单的脚本可以使用 1-2mb 或更少,我看到脚本在一些非常糟糕的情况下会高达 40mb,因为它们导入了一些非常大的 JS 库。

显然您的脚本在执行期间会使用更多内存,但该内存的主要来源将是响应正文,因此我们强烈建议使用discardResponseBodies(在页面的最底部)来降低内存使用量并且只设置responseType where/if you need the body response.

关于线性 - 一旦开始解析 JS 脚本并且所有 VU 都已初始化,我分析过的每个脚本中的大部分内存或多或少都会流向 VU。它们使用的内存量大致相同,但 k6 需要一些内存用于其他用途,具体取决于您使用的内容,应该在 200-300mb 左右。

最终您将不得不测试您的脚本并查看。如果您知道要使用某些库,请在不使用它们的情况下导入它们,以便对其进行解析并获得快速估计。您可以使用--paused --no-teardown --no-setup 运行 k6 来仅初始化 VU,而无需再次实际执行任何代码以加快估计速度。我建议提供应该使用-u <count> 运行/初始化多少 VU 以进行测试。您应该等到它在进度条前显示paused,以便一切都已初始化。 请注意,k6 将使用一些内存来解析您的 JS 并在开始时初始化其他内容,因此您可能应该开始测试至少 50 个 VU 并向上查看为额外的 VU 添加了多少内存。不经意间执行最终脚本会使用更多内存,但这对于测量目的应该很有用。

【讨论】:

很好的答案——谢谢。但是,您为什么说“您可能应该从至少 50 个 VU 开始测试并上升”?从1个VU开始上去会不会不够? 由于 golang 是垃圾收集语言,因此用于解析 JS 和其他初始化工作的内存量将不会返回,并且看起来好像一个 VU 使用它。因此,如果您启动 1 个 VU,您将看到 k6 使用 200mb+(再次取决于您的脚本),但如果您添加第二个 VU,您可能会使用相同数量的内存。从更多 VU 开始,VU 使用的内存更有可能超过之前用于解析 JS 和初始化 k6 的内存。

以上是关于k6 VU(虚拟用户)有多少内存? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

强软弱虚(关键词: ThreadLocal,堆外内存)

从 K6 模拟每个 VU 的浏览器缓存以进行负载测试

K6 用户和批处理概念

使用 K6 - 3000 VU 轰炸 AWS EC2。连接开始超时,现在我无法通过 SSL 或 HTTP 请求连接到实例。这是啥?

K6 负载测试 - 如何为整个测试运行创建顺序 ID

k6 中的 sleep 功能是暂停所有虚拟用户的执行,还是一次只暂停一个用户的执行?