Parser Crash when Fragments list > 1800
Closed this issue · 7 comments
Using lambda function to convert cloud footage into .mkv files.
Having issues with converting more than 1800 fragments.
Error captured in CloudWatch attached
AWS Java Parser Crash Log.txt
The root exception is Caused by: java.io.IOException: No space left on device
This would suggest to me that all of the available drive space available to the lambda function was consumed. Per Lambda limits you can use up to 512 MB in the temp directory.
Is there any way to capture the memory usage on the lambda function such that I can log it to CloudWatch?
I have observed another crash occur.
This happened after trying to create another clip after the first crash observed above occurs.
Error captured from CloudWatch attached:
AWS Java Parser Crash Log 2.txt
Hey Mitchell,
I have done some more testing and found some more crashes occuring.
What I am seeing is that subsequent "Parser" runs is causing a crash.
In the log at:
2020-07-03T12:37:39.562-07:00
Total Fragments: 648
Is the first time Lambda function runs and it completes with no isses.
At time stamp:
2020-07-03T12:38:53.833-07:00
Total Fragments: 575
Is the second time the Lambda function runs with an even smaller fragment count. However, this one crashes with the writing to output failed.
Are the Lambda functions not tearing down all the way / clearing the Temp ?
If this is the case, how do I clear out the Temp directory such that subsequent requests that hit the lambda function dont crash?
Full Log is here:
AWS Java Parser Crash Log 3.txt
Added code to delete everything from temp before excution:
System.out.println(Runtime.getRuntime().exec("rm -rf /tmp/*"));
Did not help.
Here is a blog that describes the way that lambda will reuse containers: https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/
Is there any way to capture the memory usage on the lambda function such that I can log it to CloudWatch?
I am not aware of any out-of-the-box solution for monitoring the /tmp
usage.
System.out.println(Runtime.getRuntime().exec("rm -rf /tmp/*"));
Did not help.
Hmm. Perhaps also validate that the /tmp
directory really is empty? Perhaps it takes a bit for space to be truly reclaimed? I am not sure. Some other things you could consider are:
- Keep the data in memory instead of writing it to
/tmp
. I realize this may not be a feasible option depending on how the MKV files are used (i.e. with ffmpeg). - Use EFS for storage in the lambda. Here is a blog post about that: https://aws.amazon.com/blogs/aws/new-a-shared-file-system-for-your-lambda-functions/
Resolving. Please reopen if you need further help