Tia*_*ila 3 c# amazon-web-services .net-core aws-lambda
我有一个在 .NET Core 2.1 中内置的 AWS Lambda 函数。这是由 SQS 队列触发的。
该函数的最大内存为 512MB,超时为 2 分钟。
查看 CloudWatch 日志,我发现在执行一定次数后,使用的最大内存有所增加。请参阅下面的图片:
经过一些执行后,它不断增加,从 217MB 到 218MB,再到 219MB,依此类推。该函数运行多次且频率很高。
有人在 AWS Lambda 上遇到过这个问题吗?预先感谢您的任何帮助。
今天,我尝试优化 Lambda 函数的内存并浏览了这篇文章,因此分享一些有关内存的想法,可能会对其他人有所帮助。
首先最好使用日志洞察运行下面的查询来查看内存统计信息(即memory used内存total allocated),并根据使用情况将内存分配给您的 Lambda 函数,因为从您的日志来看,您没有正确优化内存,这意味着 250MB 或 50% 的内存已超过-配置后,您无需在您的情况下使用它即可付费。
运行以下查询以查找过度配置的内存。
filter @type = "REPORT"
| stats max(@memorySize / 1024 / 1024) as provisonedMemoryMB,
min(@maxMemoryUsed / 1024 / 1024) as smallestMemoryRequestMB,
avg(@maxMemoryUsed / 1024 / 1024) as avgMemoryUsedMB,
max(@maxMemoryUsed / 1024 / 1024) as maxMemoryUsedMB,
provisonedMemoryMB - maxMemoryUsedMB as overProvisionedMB
Run Code Online (Sandbox Code Playgroud)
输出
Field Value
avgMemoryUsedMB
449.654
maxMemoryUsedMB
616.0736
overProvisionedMB
909.8053
provisonedMemoryMB
1525.8789
smallestMemoryRequestMB
324.2493
Run Code Online (Sandbox Code Playgroud)
您可以设置比maxMemoryUsedMB大一点的值。
它从 217MB 变为 218MB,然后变为 219MB,依此类推。该函数运行多次且频率较高
您显示的统计数据非常小,这只是一些请求,也是 @Matthew 提到的一个原因,这也是预期的,因为并非每个 SQS 消息都相同,也不是来自 lambda 的目的地,例如,将消息推送到 RDS 等,所以处理和使用 SQS 以及通过 Lambda 与我们的资源交互可能会增加或减少内存。
此外,持续时间会影响内存,因此运行查询以查找昂贵的请求。
filter @type = "REPORT"
| stats avg(@duration), max(@duration), min(@duration),max(@memorySize / 1024 / 1024) by bin(5m)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,内存随着花费更多时间的请求而变化
filter @type = "REPORT"
| fields @requestId, @billedDuration, @maxMemoryUsed/1024/1024
| sort by @billedDuration desc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9678 次 |
| 最近记录: |