App Engine 实例内存不断增加
App Engine instance memory constantly increasing
我希望我的应用程序引擎实例 (Python) 的内存使用量在初始启动期后相对平稳。对我的应用程序的每个请求都是短暂的,似乎单个请求的所有内存使用都应该在不久之后释放。
然而实际情况并非如此。下面是控制台提供的实例内存使用情况的快照。我的应用程序流量相对较低,所以我通常只有一个实例 运行。在图表中的两天时间里,内存使用趋势在不断增加。 (这两个光点是两个实例短暂出现的地方 运行。)
我经常遇到内存超出的错误,所以我想防止内存使用量持续增加。
快照时间:
- Memcache 使用不到 1MB
- 任务队列为空
- 流量低 (0.2 count/second)
我希望在这些情况下实例内存使用率会下降,但并没有发生。
因为我使用的是 Python 及其自动垃圾收集功能,所以我不明白我怎么会造成这种情况。
这是应用引擎的预期行为吗?我能做些什么来修复它吗?
我发现 解释了这里发生的部分情况。我将根据该答案进行总结:
使用 NDB 时,实体存储在上下文缓存中,上下文缓存是内存使用的一部分。
根据 documentation,人们会期望在完成 HTTP 请求后释放内存。
实际上,HTTP 请求完成后不会释放内存。显然,上下文缓存被重用,并且在下次使用之前清除缓存,这可能需要很长时间才能发生。
对于我的情况,我将 _use_cache=False
添加到大多数实体以防止它们存储在上下文缓存中。由于我的应用程序的工作方式,我不需要这些实体的上下文缓存,这减少了内存使用量。
以上只是部分解决方案!
即使我的大部分实体都关闭了缓存,我的内存使用量仍然在不断增加!下面是 2.5 天时间段内的快照,其中内存从 36 MB 不断增加到 81 MB。这是 7 月 4 日的周末,交通不畅。
我希望我的应用程序引擎实例 (Python) 的内存使用量在初始启动期后相对平稳。对我的应用程序的每个请求都是短暂的,似乎单个请求的所有内存使用都应该在不久之后释放。
然而实际情况并非如此。下面是控制台提供的实例内存使用情况的快照。我的应用程序流量相对较低,所以我通常只有一个实例 运行。在图表中的两天时间里,内存使用趋势在不断增加。 (这两个光点是两个实例短暂出现的地方 运行。)
我经常遇到内存超出的错误,所以我想防止内存使用量持续增加。
快照时间:
- Memcache 使用不到 1MB
- 任务队列为空
- 流量低 (0.2 count/second)
我希望在这些情况下实例内存使用率会下降,但并没有发生。
因为我使用的是 Python 及其自动垃圾收集功能,所以我不明白我怎么会造成这种情况。
这是应用引擎的预期行为吗?我能做些什么来修复它吗?
我发现
使用 NDB 时,实体存储在上下文缓存中,上下文缓存是内存使用的一部分。
根据 documentation,人们会期望在完成 HTTP 请求后释放内存。
实际上,HTTP 请求完成后不会释放内存。显然,上下文缓存被重用,并且在下次使用之前清除缓存,这可能需要很长时间才能发生。
对于我的情况,我将 _use_cache=False
添加到大多数实体以防止它们存储在上下文缓存中。由于我的应用程序的工作方式,我不需要这些实体的上下文缓存,这减少了内存使用量。
以上只是部分解决方案!
即使我的大部分实体都关闭了缓存,我的内存使用量仍然在不断增加!下面是 2.5 天时间段内的快照,其中内存从 36 MB 不断增加到 81 MB。这是 7 月 4 日的周末,交通不畅。