Google Cloud Function 内存不足错误没有意义

Mic*_*cka 6 out-of-memory node.js google-cloud-functions

问题:

您知道一种方法来实际监控 GCF (Node.js 8) 使用了多少内存吗?
您对 Node.js 8 的 Google Cloud Functions(甚至本地)内存分析有什么建议吗?

语境:

我部署了一个具有 128MB 内存的 Google Cloud Function (NodeJS),过去运行得很好。

今天,它没有说“ Error: memory limit exceeded.”。

GCP 告诉我该函数使用的内存不超过 58MiB,但当它使用 128MB 时,它会失败并出现内存错误。

我感到失落和有缺陷,因为:

  1. 它曾经有效,从那以后我没有改变任何事情。
  2. 在监控内存消耗方面我似乎不能相信谷歌

  3. 该函数的“详细信息”屏幕显示其消耗不超过 58MiB。 功能的“详细信息”屏幕

  4. 我在监控中创建的仪表板以便监控它显示相同的值。 仪表板的屏幕截图
  5. 但它因内存限制而失败。 函数的日志

我已经看过这个问题Memory profiler for Google cloud function? ,但 Stackdriver Profiler 似乎不适用于 GCF(根据文档

sll*_*pis -1

通过 Google Cloud Console 在 Cloud Functions 中设置内存分配。

文档中:

要在 Google Cloud Platform Console 中设置内存分配和超时:

  1. 在 Google Cloud Platform Console 中,从左侧菜单中选择 Cloud Functions。
  2. 通过在函数列表中单击函数名称来选择函数。
  3. 单击顶部菜单中的编辑图标。
  4. 从标有已分配内存的下拉菜单中选择内存分配。
  5. 单击“更多”以显示高级选项,然后在“超时”文本框中输入秒数。
  6. 单击“保存”以更新函数。

检查内存泄漏的事项(排除故障非常棘手):

  • 异步等待函数。
  • Promise“在后台”运行(使用 .then)。
  • 写入文件系统的可写部分 /tmp/在函数实例中存储临时文件也会消耗为该函数配置的内存。

Cloud Function 的自动伸缩和并发概念

函数的每个实例一次仅处理一个并发请求。这意味着当您的代码正在处理一个请求时,不可能将第二个请求路由到同一实例。因此,原始请求可以使用您请求的全部资源(CPU 和内存)。

云功能监控

以下是可用于监控您的云功能的可用资源: