python - AWS lambda - 每次执行后发布/tmp 存储

标签 python node.js aws-lambda aws-sdk

我有 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/

相关文章:

python - Django 中属性的 bool 组合

python - Airflow 与 BgQuery Error 集成

amazon-web-services - AWS Lambda@edge。在原始响应触发函数中访问浏览器cookie

amazon-web-services - AWS Cognito InitiateAuth 通过 Lambda 函数导致错误

python - Django错误 "home.models.Friend.DoesNotExist: Friend matching query does not exist."

在类的所有方法中将参数转换为相同标准的 Pythonic 方式

javascript - 两个文件使用带有 mocha 的 supertest 导致 EADDRINUSE

node.js - io.sockets.emit 和广播有什么区别?

node.js - Tailable 游标在到达集合末尾时关闭

amazon-web-services - S3 PutObject 上的 Lambda 访问被拒绝