我意识到我需要分配比我的 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(使用前将#替换为@)