Cloud Functions for Firebase killed due to memory limit exceeded
[update] As one commenter suggested, this should no longer be an issue, as firebase functions now maintain their settings on re-deploy. Thanks firebase!
Turns out, and this is not obvious or documented, you can increase the memory allocation to your functions in the Google Functions Console. You can also increase the timeout for long-running functions. It solved the problem with memory overload and everything is working great now.
Edit: Note that Firebase will reset your default values on deploy, so you should remember to login to the console and update them right away. I am still looking around for a way to update these settings via CLI, will update when I find it.
The latest firebase deploy command does overwrite the memory allocation to default 256MB and timeout up to 60s.
Alternatively , to specify the desired memory allocation and maximum timeout , I use gcloud command such as:
gcloud beta functions deploy YourFunctionName --memory=2048MB --timeout=540s
Other options, please refer to:
https://cloud.google.com/sdk/gcloud/reference/beta/functions/deploy
I was lost in the UI, couldn't find any option to change the memory, but finally found it:
- Go to the Google Cloud Platform Console (not the Firebase console)
- Select Cloud Functions in the menu
- Now you see your firebase function in here if it's correct. Otherwise check if you selected the right project.
- Ignore all checkboxes, buttons and menu items, just click on the name of the function.
- Click on edit (top menu) and only change the allocated memory and click save.
You can set this from within your Cloud Function file on Firebase.
const runtimeOpts = {
timeoutSeconds: 300,
memory: '1GB'
}
exports.myStorageFunction = functions
.runWith(runtimeOpts)
.storage
.object()
.onFinalize((object) = > {
// do some complicated things that take a lot of memory and time
});
Taken from the docs here: https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation
Don't forget to then run firebase deploy
from your terminal.