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

时间:2017-05-22 08:58:33

标签: 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,主流和创建数据的挂载是相同的。但它在自动运行时失败了。

我认为这个问题来自前一个容器(重用容器)的缓存,我在干净(/tmp之后检查了ls -alh /tmp那里没有文件但检查存储时( df /tmp)它显示使用的是77%。

任何关于制作干净/tmp文件夹或解决方案的建议都非常感谢。谢谢!

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

容器经常被重用,但不能同时使用。在函数完成时清理临时目录并查看问题是否解决。

答案 2 :(得分:0)

我尝试使用lambdash复制此问题,该功能非常强大,可以测试“开发”帐户中的命令。它允许您在Lambda环境中运行任意UNIX命令。

我反复运行了此命令,但没有看到问题出现。注意:这些命令实际上不在部署的代码中,因此此测试不能完全复制潜在的问题。

lambdash "echo Checking:;file /tmp/nullfile;rm -f /tmp/nullfile;df -h /tmp;dd if=/dev/zero bs=1024 count=88888 >> /tmp/nullfile; echo ==========;df -h /tmp"