我有 4 个将同时调用的 lambda 函数(由 SNS),SNS 事件的频率为 5 分钟。
每个函数都处理大量数据和图像(~300MB),所以我将它们存储在 /tmp
文件夹中(500MB 限制)。
在函数的开始,我写了一些代码到清理 /tmp
文件夹,以确保它没有内存不足(因为我知道 AWS lambda 有时会重用以前的容器来提高性能)。
我手动检查(创建消息并通过 SNS 发布到 4 个 lambda 函数),它工作正常。
但是当它自动运行(每 5 分钟调用一次)时,结果并不如我所愿。第一次执行没问题,但接下来,4 个甚至 4 个 lambda 函数中的 1 个抛出与“内存不足”相关的错误:“设备上没有剩余空间”,无法加载 lib,...
以前,我使用 nodejs(4.3) 它在两种情况下都可以正常工作。
但是由于某种原因我不得不改成python,主要流程和创建数据的mount是一样的。但是自动运行就失败了。
我认为问题来自先前容器(重用容器)的缓存,我检查了 /tmp
后 clean (ls -alh/tmp
) 没有文件,但是当检查存储时(df/tmp
)它显示已使用是 77%。
非常感谢制作干净的 /tmp
文件夹或解决方案的任何建议。谢谢!
已编辑:我用来清理 /tmp
文件夹的代码:
from subprocess import call
...
call('rm -rf /tmp/*', shell=True)
最佳答案
是的,lambda 是托管服务;如果 lambda 被重复调用,它们确实会重用相同的底层资源。这是我们面临的生产问题,并通过删除/tmp 解决了这个问题。 AWS 应在其常见问题解答中单独提及这一点。
if os.path.exists(tmp_file_path):
os.remove(tmp_file_path)
print("Removed the file %s" % tmp_file_path)
else:
print("Sorry, file %s does not exist." % tmp_file_path)
关于python - AWS lambda - 每次执行后发布/tmp 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44108712/