google-cloud-functions - 对 GCP Cloud Function 内存使用有何影响
问题描述
我最近重新部署了一些 python GCP 云函数,发现它们占用了大约 50mbs 的内存,触发了内存限制错误(我必须将内存分配从 256mb 增加到 512mb 才能运行)。不幸的是,这是成本的 2 倍。
我试图找出导致内存增加的原因。我唯一能想到的是最近升级的python包。因此,我根据我的本地虚拟环境在 requirements.txt 中指定了所有包版本,该环境最近没有改变。内存使用量增加仍然存在。
是否还有其他因素会导致内存利用率增加?Python 运行时仍然是 3.7,函数处理的数据没有改变。总的来说,这似乎也不是 GCP 对云功能所做的改变,因为它只发生在我重新部署的功能上。
解决方案
我可以指出内存限制错误的几种可能性:
- Cloud Functions 内存不足的原因之一如文档中所述。
您编写的文件会消耗函数可用的内存,并且有时会在调用之间持续存在。未能明确删除这些文件最终可能会导致内存不足错误和随后的冷启动。
正如这个StackOverflow Answer中所提到的,如果您在全局内存空间中分配任何东西而不释放它,内存分配将在未来的调用中计算。为了尽量减少内存使用,只在本地分配对象,这些对象将在函数完成时被清理。内存泄漏通常很难检测。
此外,云功能需要在完成后做出响应。如果他们不响应,那么他们分配的资源将不会是免费的。云函数中的任何异常都可能导致内存限制错误。
您可能还想检查提到另一种可能性的自动缩放和并发。
函数的每个实例一次只处理一个并发请求。这意味着当您的代码处理一个请求时,不可能将第二个请求路由到同一个实例。因此,原始请求可以使用您请求的全部资源(CPU 和内存)。
- 最后,这可能是由日志记录问题引起的。如果您正在记录对象,这可能会阻止这些对象被垃圾收集。您可能需要减少日志记录的详细程度并使用字符串表示来查看内存使用情况是否变得更好。无论哪种方式,您都可以尝试使用Profiler来获取有关 Cloud Function 内存情况的更多信息。
推荐阅读
- reactjs - React-router – 子页面不匹配(404 页面)
- random - 有没有办法使用交互式 CPLEX 生成随机数据?
- python-2.7 - 使用带有其他语言支持的 python2.7 argsparse 解析输入
- html - 如何把这个 Div 放在中心?
- asp.net-core - 对 nginx 反向代理后面的应用程序进行故障排除,因为 POST/PUT 请求以错误 400(错误请求)回复
- django - 使用 Django Signal 的最佳实践(用于用户身份验证?)
- java - 直到单击 CellPainterWrapper 而不是列的 TextPainter 时,表格才会显示
- django - Django - 安装 matplotlib 后使用迁移管理命令时出现奇怪的调试输出
- ansible - Ansible 检查特定目录是否存在,如果不创建它
- javascript - 未集中注意力时更新团队自定义选项卡