gpt4 book ai didi

google-app-engine - 完成对 App Engine 后端实例的请求后,何时会释放内存?

转载 作者:行者123 更新时间:2023-12-04 03:05:21 25 4
gpt4 key购买 nike

场景-

我在 App Engine 上运行 B* 实例。我有一个后台 ETL 相关任务(用 python 编写)在 App Engine 上安排为 cron 作业。时间一到,cron 发起一个 http 请求来启动任务,并在没有返回响应的情况下运行,直到任务完成。当任务正在执行时,它通常会消耗“X”MB 的 RAM。任务完成并返回 200 OK 后,App Engine 实例监控仍显示“X”MB RAM 正在使用中。

请帮助我理解以下内容 -

  1. 如果一个实例只运行一个任务并且在完成它之后,什么时候释放该任务消耗的内存?
  2. 我是否需要运行 gc.collect() 来显式调用垃圾收集器来释放 RAM?
  3. 释放 RAM 的唯一方法是重启实例?

PS:这与 NDB 完全无关,我的任务是从 Bigquery 获取输入,执行一些 ETL 操作,然后将其流式传输到 Bigquery。

最佳答案

根据我对使用大量内存进行 StringIO 操作的应用程序的观察:

  • 显式调用 gc.collect() 没有明显帮助(我什至怀疑我确实有内存泄漏,但事实并非如此)

  • 内存不会在每次请求后被释放,但是,如果实例保持存活的时间足够长而没有耗尽内存,它最终会似乎不时被释放。易于测试 - 只需增加请求之间的时间以降低可用内存耗尽率。但我想不出可用的模式。请注意,我仅在升级到 B2 实例后才观察到这一点,我的 B1 实例内存用完太快了,我从未注意到它们有释放事件。

  • 使用 instance class更多的内存(我尝试将其作为我的实例最终内存不足的解决方法)有所帮助 - 内存似乎更频繁地被释放。 可能是因为这些实例还具有更快的 CPU(但这只是猜测)。

关于google-app-engine - 完成对 App Engine 后端实例的请求后,何时会释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45026920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com