Кажется, что конфигурация ресурса ImageMagick по умолчанию в Firebase Cloud Functions не соответствует фактической памяти, выделенной для функции.
Запуск identify -list resource в контексте облачной функции Firebase дает:
File Area Memory Map Disk Thread Throttle Time
--------------------------------------------------------------------------------
18750 4.295GB 2GiB 4GiB unlimited 8 0 unlimited
Память по умолчанию, выделенная для FCF, составляет 256 МБ - экземпляр ImageMagick по умолчанию считает, что у него 2 ГБ, и поэтому не выделяет буфер с диска и может легко попытаться перераспределить память, что приведет к сбою функции на Error: memory limit exceeded. Function killed.
Один из способов - увеличить требуемую память, как было предложено выше, хотя все еще существует риск, что IM попытается перераспределить в зависимости от вашего варианта использования и выбросов.
Еще безопаснее было бы установить правильный предел памяти для IM как часть процесса обработки изображений с помощью -limit memory [your limit]. Вы можете определить приблизительное использование памяти, запустив свою логику обмена мгновенными сообщениями с помощью «-debug Cache» - он покажет вам все выделенные буферы, их размеры и то, были ли они памятью или диском.
Если IM достигает предела памяти, он начнет выделять буферы на диске (отображаемую память, а затем обычные дисковые буферы. Вам нужно будет учитывать ваш конкретный баланс между производительностью ввода-вывода и стоимостью памяти. Цена каждого дополнительного байта памяти, который вы выделяете ваш FCF умножается на 100 мс использования - так что он может быстро расти.
person
Shai Ben-Tovim
schedule
12.09.2017