mik*_*kez 0 google-cloud-platform google-cloud-functions
我有一个用 Python 编写的繁重数据处理脚本。脚本每次处理一项作业时,都会使用大约 500MB 的 RAM。(原因是因为脚本从一个非常大的数据库中查找历史记录。)处理脚本每行运行也需要大约 3 分钟。
我们已将 Python 脚本部署到 Google Cloud Function。当我们调用该函数同时处理三个作业时,该函数工作正常,内存使用量约为1500-1600MB;一切都是花花公子。
但是,当我们尝试调用该函数来同时处理 10 个或 100 个作业时,该函数因内存不足而被终止。我们在文档中注意到函数在任何时候的内存限制是 2GB。可以肯定地说,我们不能将其增加到 10GB、100GB 或 1000GB,以便我们可以并行运行更多的脚本实例吗?老实说,为什么每个函数是 2GB,而不是每次调用 2GB?我很想获得无服务器功能,以便在 Google 上进行繁重的数据处理工作;这似乎不可用。
如果是这样,您会说实现我们目标的最佳方法是使用具有 1000GB RAM 的标准 Google VM 吗?
谢谢。
2Gb 是每个实例。当一个函数被触发时,会产生一个实例。如果未使用该功能,则在一段时间后(10 分钟,或多或少,无需承诺),实例结束。
但是,如果有新请求并且实例已启动,则会重用现有实例。而且,如果有很多请求,就会产生新的实例。一个函数实例同时只能处理1个请求(无并发)
因此,当您的实例被重用时,您的执行环境中的所有元素都会被重用。如果您不清理内存和/或本地存储(/tmp 是内存存储),则会出现内存泄漏并且您的函数崩溃。
照顾好你的内存和对象句柄,清理好你的上下文。如果您的请求可以处理 1 个作业,则它必须能够处理 10 或 100 个连续的作业,而不会崩溃。
更新
我不是 Python 专家,但为了清理内存,我使用它
import gc
gc.collect()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1084 次 |
最近记录: |