DR.*_*DR. 3 amazon-web-services node.js aws-lambda
我想确定当我的函数执行时数组在内存中的大小。确定数组的大小很容易,但我没有看到数组大小与 Lambda 执行结束时记录的最大使用内存之间的相关性。
process.memoryUsage()检查设置阵列前后以及 Lambda 报告的最大内存使用情况后,没有发现明显的着色。我找不到一个好的资源来指示 Lambda 实际如何/使用什么来确定所使用的内存。任何帮助,将不胜感激?
这个问题让我自己很好奇,所以我决定运行一些测试来看看 AWS Lambda 容器内的内存分配是如何工作的。
测试 1:在内存中创建包含 100,000 个元素的数组
内存大小:128MB
exports.handler = async (event) => {
const arr = [];
for (let i = 0; i < 100000; i++) {
arr.push(i);
}
console.log(process.memoryUsage());
return 'done';
};
Run Code Online (Sandbox Code Playgroud)
结果:56 MB
2019-04-30T01:00:59.577Z cd473d5b-986c-436e-8b36-b114410c84cf { rss: 35299328,
heapTotal: 11853824,
heapUsed: 7590320,
external: 8224 }
REPORT RequestId: 2a7548f9-5d2f-4060-8f9e-deb228730d8c Duration: 155.74 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 56 MB
Run Code Online (Sandbox Code Playgroud)
测试 2:在内存中创建包含 1,000,000 个元素的数组
内存大小:128MB
2019-04-30T01:00:59.577Z cd473d5b-986c-436e-8b36-b114410c84cf { rss: 35299328,
heapTotal: 11853824,
heapUsed: 7590320,
external: 8224 }
REPORT RequestId: 2a7548f9-5d2f-4060-8f9e-deb228730d8c Duration: 155.74 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 56 MB
Run Code Online (Sandbox Code Playgroud)
结果:99 MB
2019-04-30T01:03:44.582Z 547a9de8-35f7-48e2-a53f-ab669b188f9a { rss: 80093184,
heapTotal: 55263232,
heapUsed: 52951088,
external: 8224 }
REPORT RequestId: 547a9de8-35f7-48e2-a53f-ab669b188f9a Duration: 801.68 ms Billed Duration: 900 ms Memory Size: 128 MB Max Memory Used: 99 MB
Run Code Online (Sandbox Code Playgroud)
测试 3:在内存中创建包含 10,000,000 个元素的数组
内存大小:128MB
exports.handler = async (event) => {
const arr = [];
for (let i = 0; i < 1000000; i++) {
arr.push(i);
}
console.log(process.memoryUsage());
return 'done';
};
Run Code Online (Sandbox Code Playgroud)
结果:128 MB
REPORT RequestId: f1df4f39-e0fc-4b44-8f90-c3c0e3d9c12d Duration: 3001.33 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 128 MB
2019-04-30T00:54:32.970Z f1df4f39-e0fc-4b44-8f90-c3c0e3d9c12d Task timed out after 3.00 seconds
Run Code Online (Sandbox Code Playgroud)
我认为我们可以非常自信地说 lambda 容器使用的内存确实会根据内存中数组的大小而增加;在我们的第三次测试中,我们最终耗尽了内存并超时。我在这里的假设是,控制 lambda 执行的进程也会监视该执行获取了多少内存;很可能正如cat /proc/meminfo特洛南德斯所暗示的那样。