k6中的 VU(虚拟用户)使用了多少内存?
VU 的内存使用量是否呈线性扩展,即如果 1 个 VU 使用 X KB,那么 100 个 VU 是否使用 100 * X KB?
k6中的 VU(虚拟用户)使用了多少内存?
VU 的内存使用量是否呈线性扩展,即如果 1 个 VU 使用 X KB,那么 100 个 VU 是否使用 100 * X KB?
VU 占用多少内存在很大程度上取决于您的脚本所做的事情以及(通常更重要的是)它导入/解析的其他文件的数量。由于所有 VU 都有自己的 JS VM,因此它们是所有需要解析的 JS 文件的单独副本。因此,如果您有一些大型 JS 库,它将在 VU 之间复制,并且可能占您内存使用的大部分。如果您的脚本也有一些包含大量测试数据的大文件 - 它们也会被复制等等。以我的经验,简单的脚本可以使用 1-2mb 或更少,我已经看到脚本在一些非常糟糕的情况下高达 40mb,它们导入了一些非常大的 JS 库。
显然,您的脚本将在执行期间使用更多内存,但该内存的主要来源将是响应主体,因此我们强烈建议使用discardResponseBodies(在页面的最底部)来降低内存使用量,并且仅设置 responseType where/if you需要身体反应。
关于线性 - 一旦开始解析 JS 脚本并且所有 VU 都已初始化,我分析过的每个脚本中的大部分内存或多或少都会流向 VU。它们使用的内存量大致相同,但 k6 需要一些内存用于其他用途,具体取决于您使用的内存,应该在 200-300mb 左右。
最终,您将不得不测试您的脚本并查看。如果您知道要使用某些库,请在不使用它们的情况下导入它们,以便对其进行解析并获得快速估计。您可以运行 k6--paused --no-teardown --no-setup
以仅初始化 VU 而无需再次实际执行任何代码以加快估计速度。我建议提供应该运行/初始化多少 VU 以-u <count>
进行测试。你应该等到它说paused
在进度条之前,以便一切都已初始化。请注意,k6 将使用一些内存来解析您的 JS 并在开始时初始化其他内容,因此您可能应该开始测试至少 50 个 VU 并向上查看为额外的 VU 添加了多少内存。不经意地执行最终脚本将使用更多内存,但这对于测量目的应该很有用。