【问题标题】:Exceeded soft private memory limit of 128 MB with X MB after servicing Y requests total服务 Y 个请求后,超过了 128 MB 的软专用内存限制,其中 X MB
【发布时间】:2023-04-26 00:15:01
【问题描述】:

我在我的 App Engine 应用程序中遇到可怕的超出内存错误,该应用程序有一个 Cron 作业将多个小任务推送到队列中。

我认为任何单个任务都不应该触发严重错误,所以我猜测它们之间存在某种联系;分享缺失的记忆。 我正在以 4/s 的最大速率和 5 的存储桶大小运行我的队列。

我如何确定以及我可以/应该做什么?

Exceeded soft private memory limit of 128 MB with 131 MB after servicing 18 requests total
Exceeded soft private memory limit of 128 MB with 128 MB after servicing 1933 requests total
Exceeded soft private memory limit of 128 MB with 153 MB after servicing 3697 requests total

【问题讨论】:

    标签: google-app-engine memory task-queue rate bucket


    【解决方案1】:

    您可以像这样监控内存实例的使用情况(我假设是 Python):

    from google.appengine.api.runtime import memory_usage
    logging.warn("Memory usage:  %d MB" % (memory_usage().current()))
    

    您可以执行以下操作:

    1. 降低任务率。
    2. 使用内存更大的实例。
    3. 修改您的代码以提高效率。我最近在任务队列中遇到了这个问题,所以我把每个任务都缩小了,然后菊花链了一个新任务来继续工作。任务完成后,垃圾收集器应立即为您清理。

    【讨论】:

      【解决方案2】:

      当一个任务执行了 10 分钟后,它就会终止。对此的错误消息可能会有些混乱。

      【讨论】: