Длительный холодный запуск с функцией AWS Lambda python - PullRequest
0 голосов
/ 03 февраля 2020

Я преобразовал очень простую функцию flask (то есть два простых маршрута, связывающих запрос sql и превратил их в таблицу) в функцию Lambda с помощью Zappa. Развернутая функция составляет около 20 МБ. Поскольку трафик c будет очень низким, я не использую какой-либо механизм прогрева для своей функции.

Функция требует только 128 МБ памяти, и при запуске с ней, когда все предыдущие экземпляры были уничтожены, холодный начало примерно 16 секунд.

Это кажется интуитивно долгим, и то, что я прочитал (например, здесь ), что говорит о том, что python функционирует , а не в VP C имеют относительно низкую задержку для холодных запусков.

Если я добавлю память в функцию, время холодного запуска, похоже, будет линейно уменьшаться. Опять же, это противоречит тому, что я прочитал (например, здесь , как указано выше) с точки зрения памяти, не являющейся проблемой для задержки холодного запуска. Это моя таблица времени вызовов: enter image description here

Должен ли я быть удивлен этими результатами или я что-то упустил?

Спасибо

Стивен

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Перед вызовом функции-обработчика базовый ЦП не регулируется (см. здесь: изобретение видео ). Поскольку расчетная продолжительность уменьшается по мере увеличения объема памяти, что-то подсказывает мне, что вы можете написать определения функций в обработчике, который естественным образом регулируется в соответствии с объемом памяти, выделенной для функции, и занимает больше времени.

Попробуйте описать все функции, поместите переменные c вне обработчика и сохраните минимальный код обработчика. Это гарантирует, что Lambda проводит больше времени вне обработчика с полной загрузкой ЦП, прежде чем вызывать функцию обработчика там, где она регулируется.

Лучший способ получить больше информации об этом - это профилирование кода вашей функции с помощью X- Сегменты луча , чтобы увидеть, где функция тратит больше времени. Это даст более четкую картину, если это действительно холодный запуск или просто функция занимает больше времени.

Примечание: Длительности холодного запуска не учитываются в показателях продолжительности вашей функции, а скорее отображаются как " длительность инициализации "при включении трассировки рентгеновских лучей.

1 голос
/ 03 февраля 2020

Я не (так) удивлен. Имейте в виду, что при 1 ГБ ОЗУ ЦП является одноядерным, а ЦП растет линейно вместе с памятью.

Попробуйте этот инструмент для тонкой настройки памяти / мощности и стоимости Lambda. Если вы не хотите увеличивать объем памяти, попробуйте использовать Provisioned Concurrency для сокращения холодных запусков.

PS: вы уверены, что это время из-за холодного старта?

...