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