当我转换一张相对较小的图片(2mb)时,Firebase云函数经常会出现间歇性错误。成功时,该函数只需要大约2000毫秒或更短的时间就能完成,并且根据Image Magick文档,我不应该看到任何问题。
我尝试增加命令的缓冲区大小,但Firebase不允许这样做,我还尝试寻找替代.spawn()
的方法,因为它可能会被垃圾卡住而使速度变慢。但是没有一个方案奏效。
当我转换一张相对较小的图片(2mb)时,Firebase云函数经常会出现间歇性错误。成功时,该函数只需要大约2000毫秒或更短的时间就能完成,并且根据Image Magick文档,我不应该看到任何问题。
我尝试增加命令的缓冲区大小,但Firebase不允许这样做,我还尝试寻找替代.spawn()
的方法,因为它可能会被垃圾卡住而使速度变慢。但是没有一个方案奏效。
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
});
从这里的文档中提取: https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation
别忘了从终端运行firebase deploy
。
import { VALID_MEMORY_OPTIONS } from 'firebase-functions';
这行代码是用于导入 Firebase Functions 中的 VALID_MEMORY_OPTIONS
常量。接下来,VALID_MEMORY_OPTIONS['1GB']
返回的是一个 TypeScript 类型,表示内存选项中可用的最大值为 1GB。 - Ruben我在用户界面中迷失了方向,找不到更改内存的选项,但最终找到了:
[更新] 正如一位评论者所建议的那样,这不再是一个问题,因为Firebase函数现在可以在重新部署时保留它们的设置。谢谢Firebase!
事实证明,这并不明显或者有记录可循,你可以在Google Functions控制台中增加函数的内存分配。你也可以增加长时间运行函数的超时时间。这解决了内存超载的问题,现在一切正常工作。
编辑:请注意,Firebase会在部署时重置默认值,所以您应该立即登录到控制台并更新它们。我仍在寻找一种通过CLI更新这些设置的方法,找到后将进行更新。
最新的Firebase部署命令会将内存分配覆盖为默认的256MB,并将超时时间延长至60秒。
另外,为了指定所需的内存分配和最大超时时间,我使用gcloud命令,例如:
gcloud beta functions deploy YourFunctionName --memory=2048MB --timeout=540s
其他选项,请参考:
https://cloud.google.com/sdk/gcloud/reference/beta/functions/deploy
您可以在Firebase函数定义中添加配置,例如:
functions.runWith({memory: '2GB', timeoutSeconds: '360'})
identify -list resource
命令会产生以下结果:File Area Memory Map Disk Thread Throttle Time
--------------------------------------------------------------------------------
18750 4.295GB 2GiB 4GiB unlimited 8 0 unlimited