轉換相對較小的圖片(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
功能設置正在爲我重新設置。 –