【问题标题】:App Engine instance memory constantly increasingApp Engine 实例内存不断增加
【发布时间】:2016-10-09 09:23:42
【问题描述】:

我预计我的应用引擎实例 (Python) 的内存使用量在初始启动期后会相对平稳。对我的应用程序的每个请求都是短暂的,似乎单个请求的所有内存使用量都应该在不久之后释放。

但实际情况并非如此。下面是控制台提供的实例内存使用情况的快照。我的应用程序的流量相对较低,因此我通常只运行一个实例。在图中的两天内,内存使用趋势不断增加。 (这两个光点是两个实例短暂运行的地方。)

我经常收到内存超出错误,所以我想防止内存使用量持续增加。

快照时:

  • Memcache 使用不到 1MB
  • 任务队列为空
  • 流量低(0.2 次/秒)

我希望实例内存使用量在这些情况下会下降,但它没有发生。

因为我使用的是带有自动垃圾收集功能的 Python,所以我不明白我是怎么造成这种情况的。

这是预期的应用引擎行为吗?我可以做些什么来解决它?

【问题讨论】:

  • 你有什么解决办法吗?我也面临同样的问题。
  • @SudhanshuGaur,不,我从来没有这样做过。我只是接受实例偶尔会超出内存限制、崩溃然后重新启动。只要您运行多个实例,这没什么大不了的,因为您的应用始终可用。

标签: python google-app-engine memory memory-management app-engine-ndb


【解决方案1】:

我发现another answer 解释了这里发生的部分情况。我会根据这个答案做一个总结:

  1. 使用 NDB 时,实体存储在上下文缓存中,上下文缓存是内存使用的一部分。

  2. documentation 可以看出,在 HTTP 请求完成后,内存会被释放。

  3. 实际上,在 HTTP 请求完成时不会释放内存。显然,上下文缓存被重复使用,并且在下次使用之前清除缓存,这可能需要很长时间。

对于我的情况,我将_use_cache=False 添加到大多数实体以防止它们被存储在上下文缓存中。由于我的应用程序的工作方式,我不需要这些实体的上下文缓存,这减少了内存使用量。

以上只是部分解决方案!

即使我的大多数实体都关闭了缓存,我的内存使用量仍在不断增加!下面是 2.5 天期间的快照,其中内存从 36 MB 连续增加到 81 MB。这是 7 月 4 日的周末,人流量少。

【讨论】:

    猜你喜欢
    • 2020-10-23
    • 2018-11-03
    • 2020-07-20
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多