я случайно развернутом некоторых Java-кода в AWS Lambda, который содержит следующий очевидно ошибочный геттер:АМС Лямбда вызывают тревогу поведения после случайного бесконечного цикла
public String getLocation() {
return this.getLocation();
}
Функция Лямбды выполнена с пределом 15 секунд и 320 Mo .Это инициируется потоком DynamoDB. После развертывания проблемного кода я изменил таблицу DynamoDB примерно на 22h17 и, следовательно, выполнил код. Я проверил журналы, и, как вы можете ожидать от предыдущей функции, у меня был классический StackOverflowError с очень длинной трассировкой стека. Однако я был удивлен, увидев, что это не остановило функцию, которая продолжала выполнять и сообщать о нескольких ошибках переполнения стека (журналы в CloudWatch). Я был еще больше обеспокоен, когда понял, что функция просто не остановится даже после 15-секундных ограничений. Я не мог найти способ вручную остановить его, поэтому я просто удалил его с консоли Lambda около 22h30, который наконец-то убил его. Следующий график (от CloudWatch) показывает продолжительность выполнения с течением времени, и вы можете увидеть несколько тестов, которые я выполнил перед запуском ошибки (работает более 10 секунд), а затем последовательные быстрые прогоны (около 200 мс) между 22 ч. 17 м. И 22 ч. 30 м.
Кроме того, я уверен, что я не трогайте мою DynamoDB таблицу (и никто другой не имеет доступа к нему) и не пытались выполнить функцию лямбда-либо другим способом. Как он продолжал выполняться в течение нескольких минут, пока я не удалю его? Я, конечно, должен был быть более осторожным и сначала выполнять местные предварительные испытания, но не является ли ограничение продолжительности, чтобы гарантировать, что ничто не будет выполнено после достижения?
Благодарим за помощь.
Где доказательства того, что для любого вызова было выполнено более 15 секунд? График находится в миллисекундах, поэтому 15 секунд = 15000. Похоже, что он продолжал работать, потому что он продолжал вызываться, и удаление этого прекратило больше вызовов. –
Вы правы. Проблема заключается не в том, что функция работала более 15 секунд, но, как я сказал в сообщении, я наблюдал несколько последовательных быстрых прогонов без причины (DynamoDB не обновлялся, поэтому в поток не приходило ничего, и я не пытался для выполнения функции каким-либо другим способом). –