繁体   English   中英

GAE Python 标准:超过硬 memory 限制,而 RSS 小两倍

[英]GAE Python Standard: Exceeded hard memory limit while RSS is twice smaller

我在 App Engine Python3 标准环境(Flask)中有一个应用程序。 该应用程序处理图像。 它使用临时 (/tmp) 空间下载并调整它们的大小。 对于图像处理,它使用 Pillow (PIL.Image) 将所有内容加载到 memory 中。 因此,该应用程序非常消耗 memory,因为图像可能很大(例如 6000x6000)。 我开始在 F1/F2/B1/B2 实例上收到“超出硬 memory 限制”错误。 这有点可以理解。 所以我使用 Python 的资源模块添加了最大驻留集大小RSS的当前值的跟踪:

maxrss = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss

并将实例 class 增加到 B4(1GB RAM)。 但这没有帮助。 以下是来自 Cloud Logging 的日志:

2021-12-09 18:17:49.352 MSK 291 - mem: 418,088
2021-12-09 18:17:49.476 MSK Exceeded hard memory limit of 1024 MB with 1075 MB after servicing 7 requests total. Consider setting a larger instance class in app.yaml.
2021-12-09 18:17:49.478 MSK [start] 2021/12/09 15:17:49.477740 Quitting on terminated signal
2021-12-09 18:17:49.483 MSK [10] [INFO] Handling signal: term
2021-12-09 18:17:49.616 MSK 292 - mem: 418,088

291和202是遍历所有图片的次数,mem是resource模块上报的max_rss。

我不明白为什么 AppEngine 看到的服务器进程的 RSS 和 GAE 服务的 memory 之间存在如此大的差异。

I understand that server code is executed inside OS and OS is inside Docker and GAE measures memory from the top, but 600MB for Linux and Docker seems too much, doesn't it?

第一个问题:我如何了解我的代码在 GAE 上实际消耗了多少 memory? 为什么GAE的memory和一个进程的RSS有这么大的区别?

好吧,我找到了占据 memory 的答案。 根据https://cloud.google.com/appengine/docs/standard/python3/using-temp-files

此目录中的所有文件(即 /tmp,由我添加)都存储在实例的 RAM中,因此写入 /tmp 会占用系统 memory。 此外,/tmp 目录中的文件仅对创建文件的应用程序实例可用。

就是这么简单。 因此,基本上实例类的 memory 限制是进程 memory 和您在 /tmp 文件夹中创建的所有文件的总和。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM