Функция Google Cloud - превышен лимит памяти (2 ГБ) - интенсивная обработка данных - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть тяжелый сценарий обработки данных, написанный на Python.Каждый раз, когда скрипт обрабатывает одно задание, используется около 500 МБ ОЗУ.(Причина в том, что сценарий ищет исторические записи из очень большой базы данных.) Для выполнения каждой строки сценарию также требуется около 3 минут.

Мы развернули наш сценарий python в облачной функции Google.Когда мы вызываем функцию для обработки трех заданий одновременно, функция работает нормально, использование памяти составляет около 1500-1600 МБ;все прекрасно.

Однако, когда мы пытаемся вызвать функцию для обработки 10 или 100 заданий одновременно, функция уничтожается при превышении памяти.В документации мы заметили, что ограничение памяти для функции в любой момент времени составляет 2 ГБ.Можно ли с уверенностью сказать, что мы не можем увеличить это до 10 ГБ, 100 ГБ или 1000 ГБ, чтобы мы могли запускать больше экземпляров сценария параллельно?Если честно, почему 2ГБ на функцию, а не 2ГБ на вызов?Я хотел бы иметь доступ к безсерверным возможностям для тяжелой обработки данных в Google;кажется, что это недоступно.

Если да, то могли бы вы сказать, что лучший способ достичь нашей цели - просто использовать стандартную виртуальную машину Google с 1000 ГБ ОЗУ?

Спасибо.

1 Ответ

2 голосов
/ 27 сентября 2019

2 Гб за экземпляр.Когда функция запускается, создается экземпляр.Если функция не используется, через некоторое время (10 минут, более или менее, без фиксации), конец экземпляра.

Однако, если есть новый запрос и экземпляр запущен, существующий экземплярповторно.И, если есть много запросов, появляются новые экземпляры.Экземпляр функции может обрабатывать только 1 запрос в одно и то же время (без параллелизма)

Таким образом, когда ваш экземпляр используется повторно, все элементы в вашей среде выполнения используются повторно.Если вы не очистите память и / или локальное хранилище (/ tmp, которое находится в памяти), у вас утечка памяти и сбой вашей функции.

Позаботьтесь о своей памяти и дескрипторе объекта,хорошо очистить ваш контекст.Если ваш запрос может обрабатывать 1 задание, он должен обрабатывать 10 или 100 последовательных заданий без сбоев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...