k6 VU(虚拟用户)需要多少内存?

时间:2019-01-15 17:43:26

标签: load-testing k6

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

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

1 个答案:

答案 0 :(得分:0)

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

很明显,您的脚本将在执行期间使用更多的内存,但是该内存的主要来源将是响应主体,因此我们强烈建议使用discardResponseBodies(在页面的最底部)来降低内存使用量,并仅在需要身体响应的地方/位置设置responseType。

关于线性-在开始分析了JS脚本并初始化了所有VU之后,我分析过的每个脚本中的内存几乎都会分配给VU。它们使用的内存量大致相同,但是根据您使用的内存,k6的其他用途需要一些内存,大约200-300mb。

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