【问题标题】:AWS Lambda Sporadic "No space left on device" errorAWS Lambda 零星“设备上没有剩余空间”错误
【发布时间】:2015-10-27 08:02:49
【问题描述】:

将 20M 文件下载到 /tmp 时,Amazon Lambda 函数调用偶尔会失败,设备上没有剩余空间。 lambda 限制页面清楚地表明,临时磁盘容量(“/tmp”空间)的限制是 512M,大概是每个 lambda 调用,而不是每个 lambda 函数在其所有调用中的限制。

详情如下:

同时调用一个 lambda 函数(java 8 运行时,角色“lambda_basic_execution”)(40 个并发调用)。每次调用都从 s3 下载数据(在所有情况下,数据都小于 512M 限制)。随机地,这些调用中有 4 到 5 次失败并出现 no left space on device 错误。我相信其中一些调用最终会在同一台机器和同一 JVM 中,共享 512M 临时磁盘的限制。对我来说听起来像是一个错误。

这是堆栈跟踪:

.....Caused by: java.io.IOException: No space left on device at java.io.FileOutputStream.writeBytes(Native Method) at java.io.FileOutputStream.write(FileOutputStream.java:326) at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122) at com.amazonaws.services.s3.internal.ServiceUtils.downloadToFile(ServiceUtils.java:295) ... 5 more

任何建议或解决方法将不胜感激。

在这里发帖:https://forums.aws.amazon.com/thread.jspa?threadID=209428

【问题讨论】:

    标签: amazon-web-services aws-lambda


    【解决方案1】:

    AWS Lambda FAQ 说:

    每个 Lambda 函数在其自己的 /tmp 目录中接收 500MB 的非永久性磁盘空间。

    您的环境可能被重复使用,因此您的临时文件可能会累积并最终超过限制:

    为了提高性能,AWS Lambda 可能会选择保留您的函数实例并重新使用它来处理后续请求,而不是创建新副本。您的代码不应假定这种情况总是会发生。

    因此,请尝试在不再需要临时文件时删除它们。您还可以插入一些调试代码来列出/tmp 目录中可能存在的内容,以确定原因。

    【讨论】:

    • 谢谢,感谢您的建议。完成后,我确实尝试清理 /tmp 中的所有内容。由于我的数据很大,即使 2 个并发调用也可以超过 500MB。 Lambda 最多重试 3 次,但即使在所有重试之后,我也会在 40 次并发调用中平均出现 4 到 5 次失败。无论如何,再次感谢。
    【解决方案2】:

    尝试 S3 并在每次调用时使用唯一的文件夹名称,并在完成后使用生命周期来清理它们。 (我认为在某些时候安装 EFS 也可能是一种选择)。

    【讨论】:

      猜你喜欢
      • 2018-06-29
      • 1970-01-01
      • 2020-12-16
      • 2021-01-07
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      相关资源
      最近更新 更多