AWS Lambda Sporadic"设备上没有剩余空间"错误

Emi*_*ova 4 amazon-web-services aws-lambda

下载20M文件时,Amazon Lambda函数调用偶尔会失败,设备没有剩余空间/tmp.lambda限制页面清楚地表明,短暂磁盘容量("/ tmp"空间)的限制是512M,可能是每个lambda调用,而不是每个lambda函数的所有调用.

以下是详细信息:

同时调用lambda函数(java 8运行时,角色"lambda_basic_execution")(40个并发调用).每次调用都从s3下载数据(在所有情况下,数据都低于512M限制).随机地,这些调用中有4到5个失败,设备错误没有剩余空间.我相信这些调用中的一些最终会在同一台机器和相同的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
Run Code Online (Sandbox Code Playgroud)

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

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

Joh*_*ein 8

AWS LAMBDA FAQ说:

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

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

为了提高性能,AWS Lambda可以选择保留您的函数实例并重复使用它来提供后续请求,而不是创建新副本.您的代码不应该假设这总是会发生.

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