转换相对较小的图片(2mb)时,我一直从Firebase云端函数中收到零星错误。成功后,该功能只需要大约2000ms或更少的时间完成,根据Image Magick文档,我不应该看到任何问题。因超出内存限制而导致Firebase死亡的云端函数
我试图增加命令的缓冲区大小,这是不允许从Firebase内部允许的,并且我试图找到.spawn()
的替代方案,因为这可能会导致垃圾超载并且速度变慢。什么都没有
转换相对较小的图片(2mb)时,我一直从Firebase云端函数中收到零星错误。成功后,该功能只需要大约2000ms或更少的时间完成,根据Image Magick文档,我不应该看到任何问题。因超出内存限制而导致Firebase死亡的云端函数
我试图增加命令的缓冲区大小,这是不允许从Firebase内部允许的,并且我试图找到.spawn()
的替代方案,因为这可能会导致垃圾超载并且速度变慢。什么都没有
[更新]正如一位评论者所建议的,这应该不再是一个问题,因为现在的firebase功能会在重新部署时保留其设置。感谢firebase!
原来,这并不明显,也没有记录,您可以增加Google Functions Console中函数的内存分配。您还可以增加长时间运行的功能的超时时间。它解决了内存过载的问题,现在一切都很顺利。
编辑:请注意,Firebase将重置部署时的默认值,因此您应该记得登录到控制台并立即更新它们。我仍然在寻找通过CLI更新这些设置的方法,当我找到它时会更新。
更新:它看起来他们现在保留重新部署的设置,以便您可以安全地更改云控制台中的内存分配!
哦,好消息!我有一段时间没有重新部署,以避免任何破坏。将尝试一个测试项目。如果它再次运作,这真是太棒了! – Kirill
更新:它每次都为我重置它们(并且由于内存限制已超出_at deploy time_,这会产生一个令人尴尬的鸡和蛋问题),因此无法部署。 –
我迷失在用户界面中,找不到任何选项可以更改记忆,却终于找到了:
的问候,彼得
似乎在火力地堡云功能默认ImageMagick的资源配置不匹配分配给功能的实际内存。 - 默认ImageMagick的实例认为它有2GB,因此不从磁盘分配缓冲区
File Area Memory Map Disk Thread Throttle Time
--------------------------------------------------------------------------------
18750 4.295GB 2GiB 4GiB unlimited 8 0 unlimited
分配到FCF的默认内存为256MB:
在火力地堡云功能产量的上下文中运行identify -list resource
并且可以轻松地尝试重新分配内存,导致该功能失败Error: memory limit exceeded. Function killed.
一种方法是增加上述建议的所需内存 - 尽管仍然存在风险,IM将尝试根据您的用例和异常值进行分配。
作为使用-limit memory [your limit]
的图像处理过程的一部分,更安全的是将正确的内存限制设置为IM。你可以通过使用`-debug Cache'运行你的IM逻辑来判断你的大约内存使用情况 - 它会显示你分配的所有缓冲区,它们的大小以及它们是内存还是磁盘。
如果IM遇到了内存限制,它将开始在磁盘上分配缓冲区(内存映射,然后是常规磁盘缓冲区)。您必须考虑I/O性能与内存成本之间的特定平衡。你分配给你的FCF内存被使用的100毫秒乘以 - 。因此,能够迅速成长
最新的firebase deploy命令确实将内存分配覆盖为默认的256MB,并且超时至60s。
可替换地,可以指定所期望的存储器分配和最大超时,我使用gcloud指令,例如:
gcloudβ函数部署YourFunctionName --memory = 2048MB --timeout = 540S
其他选项,请参考:
https://cloud.google.com/sdk/gcloud/reference/beta/functions/deploy
我找不到增加内存人的地方我的职能的位置。我应该在功能控制台中去哪里? TKS! – Walucas
@Walucas云功能> {你的功能名称}>点击“编辑”>然后编辑“内存分配”中的数字 – Kirill
功能设置正在为我重新设置。 –