【问题标题】:Google Cloud Function out of memory error not making sense谷歌云功能内存不足错误没有意义
【发布时间】:2020-04-22 18:55:03
【问题描述】:

问题:

您知道一种方法来实际监控 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. 我在Monitoring 创建的仪表板用于监控它显示相同的值。
  5. 但由于内存限制而失败。

我已经看到了这个问题Memory profiler for Google cloud function?,但 Stackdriver Profiler 似乎不适用于 GCF (per doc)

【问题讨论】:

    标签: node.js google-cloud-functions out-of-memory


    【解决方案1】:

    云功能需要在完成后做出响应!如果他们不响应,那么他们分配的资源将不会是免费的。云函数中的任何异常都可能导致内存限制错误。因此,您需要正确处理所有极端情况、异常和承诺拒绝并立即做出响应!
    tutorial video series on youtube 道格·史蒂文森 (Doug Stevenson)。
    Doug 的另一个 video about promises in cloud function
    一个由仁人主持的ask firebase video关于云功能的记忆。

    【讨论】:

      【解决方案2】:

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

      来自documentation

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

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

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

      云函数Auto-scaling and Concurrency concepts

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

      云功能监控

      这些是监控您的云功能的可用资源:

      【讨论】:

      • 谢谢。我理解添加更多内存的意义,但这是一个肮脏的修复。尤其是当我的函数消耗不超过 64MiB 时,如图所示。但是我不知道Stackdriver Monitoring,我想知道它是否会显示与谷歌已经显示的不同的数字。
      • 你有没有写信给/tmp?看看另一个SO question。我并不是说这将是完全相同的问题,但可以清楚地向您展示调试代码并找出导致内存增加的原因。
      猜你喜欢
      • 2017-08-20
      • 2018-09-14
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 2017-11-14
      • 2020-09-23
      相关资源
      最近更新 更多