AWS lambda - 每次执行后释放 /tmp 存储

新手上路,请多包涵

我有 4 个 lambda 函数将同时调用(由 SNS),SNS 事件的频率是 5 分钟。每个函数处理大量数据和图像(~300MB),所以我将它们存储在 /tmp 文件夹(500MB 限制)。

在函数开始时,我写了一些代码来清理 /tmp 文件夹,以确保它没有内存不足(因为我知道 AWS lambda 有时会重用以前的容器来提高性能)。

我手动检查它(创建消息并通过 SNS 发布到 4 个 lambda 函数),它工作正常。

但是当它自动运行时(每 5 分钟调用一次),结果并不像我预期的那样。第一次执行没问题,但之后的下一次,4 个甚至 4 个 lambda 函数中的 1 个抛出与“内存不足”相关的错误:“设备上没有剩余空间”,无法加载 lib,…

以前,我使用 nodejs(4.3) 它在两种情况下都运行良好。

但是由于某种原因我必须改用python,主要流程和创建数据的装载是相同的。但是自动运行时失败了。

我认为问题来自以前容器(重复使用的容器)的缓存,我检查了 /tmp 清理后( ls -alh /tmp )没有文件但是当检查存储时( df /tmp ) 它显示已使用的是 77%。

非常感谢任何关于清理 /tmp 文件夹或变通解决方案的建议。感谢!

编辑:我用来清理的代码 /tmp 文件夹:

 from subprocess import call
...
call('rm -rf /tmp/*', shell=True)

原文由 Ngoan Tran 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 657
1 个回答

是的,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)

原文由 Sid 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题