AWS Lambda 和不准确的内存分配

2024-05-02

我意识到我需要分配比我的 AWS Lambda 函数所需的更多的内存,否则我会得到:

{
"errorMessage": "Metaspace",
"errorType": "java.lang.OutOfMemoryError"
}

例如,我有一个分配了 128MB 的 Lambda 函数,它总是因该错误而崩溃,而在控制台中它显示“最大内存使用了 56 MB”。
然后我分配 256MB,它不再崩溃,但它总是给我一个 75 到 85MB 之间的“最大使用内存”。

怎么会?谢谢。


分配给 java lambda 函数的内存量由堆、元和保留的代码内存共享。

容器为分配了 256M 的函数执行的 java 命令类似于:

java -XX:MaxHeapSize=222823k -XX:MaxMetaspaceSize=26214k -XX:ReservedCodeCacheSize=13107k -XX:+UseSerialGC -Xshare:on -XX:-TieredCompilation -jar /var/runtime/lib/LambdaJavaRTEntry-1.0.jar

222823k + 26214k + 13107k = 256M

容器为分配了 384M 的函数执行的 java 命令类似于

java -XX:MaxHeapSize=334233k -XX:MaxMetaspaceSize=39322k -XX:ReservedCodeCacheSize=39322k -XX:+UseSerialGC -Xshare:on -XX:-TieredCompilation -jar /var/runtime/lib/LambdaJavaRTEntry-1.0.jar

334233k + 39322k + 39322k = 384M

所以,公式似乎是

85% 堆 + 10% 元 + 5% 保留代码缓存 = 100% 配置的函数内存

老实说,我不知道 Cloudwatch 日志中报告的“最大已用内存”值是如何计算的。它与我所看到的任何东西都不相符。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS Lambda 和不准确的内存分配 的相关文章

随机推荐