amazon-web-services - AWS Lambda 和不准确的内存分配

标签 amazon-web-services aws-lambda

我意识到我需要为 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 日志中报告的“已使用的最大内存”值是如何计算的。它与我所看到的任何东西都不相符。

关于amazon-web-services - AWS Lambda 和不准确的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35298616/

相关文章:

amazon-web-services - S3 事件 -> Lambda 与 S3->SNS->Lambda

amazon-web-services - DynamoDB 写入太慢

debugging - 无法在 Visual Studio Code 中调试 AWS Lambda 函数。代码镜头信息不可见

amazon-web-services - 如何抑制 AWS Athena 查询结果中的列标题?

amazon-web-services - 是否可以在AWS中的option_settings上使用Ref函数?

java - 具有 Java 资源的 AWS Lambda 应用程序

amazon-web-services - "Everyone"委托(delegate)人在 Amazon SQS 权限中有什么范围?

node.js - 减少无服务器框架发送的 Node 模块 zip 的大小

aws-lambda - AWS Lambda RDS 连接池

amazon-web-services - 如何在 cli 上的 ec2 输出中使用过滤器