Amazon web services AWS Lambda和不准确的内存分配
我意识到我需要分配比AWS Lambda函数所需的内存多得多的内存,否则我会得到:Amazon web services AWS Lambda和不准确的内存分配,amazon-web-services,aws-lambda,Amazon Web Services,Aws Lambda,我意识到我需要分配比AWS Lambda函数所需的内存多得多的内存,否则我会得到: { "errorMessage": "Metaspace", "errorType": "java.lang.OutOfMemoryError" } 例如,我有一个分配了128MB的Lambda函数,它总是因为这个错误而崩溃,而在控制台中它说“使用了56MB的最大内存”。 然后我分配256MB,它不再崩溃,但它总是给我一个75到85MB之间的“使用的最大内存” 为什么?谢谢。分配给java lambda函数的内
{
"errorMessage": "Metaspace",
"errorType": "java.lang.OutOfMemoryError"
}
例如,我有一个分配了128MB的Lambda函数,它总是因为这个错误而崩溃,而在控制台中它说“使用了56MB的最大内存”。然后我分配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日志中报告的“使用的最大内存”值是如何计算的。它与我看到的任何东西都不一致。这里发生的事情可能是两件事之一:
当您使用更大的内存占用时,它会增加元空间分配,从而使函数能够运行。否决的人可能会解释原因。我也遇到了同样的问题。有人知道为什么会发生这种情况吗?我有类似的问题。真正的问题是:这些设置可以更改吗?谢谢您的输入。您可以通过
ManagementFactory.getRuntimeMXBean().getInputArguments()
找到答案。