Как мне решить «Запрос был прерван после слишком долгого ожидания попытки обработать ошибку вашего запроса», сгенерированный из App Engine

В целом у нас около 2 запросов в секунду. Однако после того, как мы отправили уведомление 3000 пользователям, мы неожиданно получили 120 запросов в секунду. К сожалению, около половины этих пользователей получали ошибки сервера 5XX, то есть половина пользователей, которые приходили, получали пустые страницы. После того, как реклама исчезла, больше не было ошибок сервера.

Я провел некоторое исследование, и кажется, что это из-за времени запуска, которое слишком долго запускалось для экземпляра и, следовательно, прерывалось. Я проверил номер своего экземпляра, было создано до 90 экземпляров, но количество активных экземпляров упало с 40 до 0 через секунду. Эта проблема возникала только при внезапном увеличении количества запросов, но я думал, что механизм приложений должен был справиться с таким увеличением.

Мой вопрос, как я могу решить эту проблему? Или где я должен продолжать копать, чтобы найти корень проблемы. Заранее спасибо!

1

Решение

Какие коды 5XX, где вы видите?

У меня возникла проблема с загадочным зависанием экземпляров & умирает при запуске:

Экземпляр ядра приложения мгновенно умирает, блокируя отложенные задачи до истечения 10 минут

Это было из-за сторонней библиотеки, которую я использовал, которая пыталась привязать порт во время создания экземпляра, и я закончил редактировать исходный код этой библиотеки.

Я также испытывал сбои после того, как экземпляр отправил свое ~ 20-е push-уведомление в APNS из-за утечки памяти в версии ssl-библиотеки python для движка приложений.

Ваша проблема немного отличается от этих, но шаги по ее устранению ощущаются одинаково:

  1. Настройте «песочницу», развернув проект с другим идентификатором проекта и воспроизведя проблему. Сделать это должен сценарий, который попадает в эту песочницу с тысячами запросов в течение нескольких минут с вашего локального компьютера.
  2. Комментируйте вещи из своего кода, снова разверните в песочнице, посмотрите, не сработает ли он, повторяйте, пока ваш скрипт больше не сбоит.

Продолжение процесса устранения, подобного этому, должно привести вас к тому, что вызывает проблему, исключив все, что не вызывает проблему.

Вы также можете сделать это в обратном направлении, начав с проекта типа «Здравствуй, мир» и систематически копировать фрагменты вставки кода своего приложения до тех пор, пока проблема не начнется.

1

Другие решения

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

Также проверьте настройки масштабирования вашего проекта в файле yaml, особенно эти параметры:

automaticScaling:
coolDownPeriod: 120s
cpuUtilization:
targetUtilization: 0.5
maxTotalInstances: 8
minTotalInstances: 1
0

Спасибо всем за помощь, я разобрался с проблемой.

Благодарность принадлежит Дану Корнилеску, его комментарии дали мне подсказки, чтобы найти корень проблемы, потому что мне не хватало min_idle_instances. Как только я установил достаточное количество min_idle_instance в моем разделе автоматического масштабирования в app.yaml, я не получил никаких ошибок сервера 5XX.

0
По вопросам рекламы [email protected]