Как решить «Запрос был прерван после слишком долгого ожидания попытки обработать ошибку запроса», сгенерированного из App Engine - PullRequest
0 голосов
/ 04 июля 2018

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

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

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

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

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

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

automaticScaling:
  coolDownPeriod: 120s
  cpuUtilization:
    targetUtilization: 0.5
  maxTotalInstances: 8
  minTotalInstances: 1
0 голосов
/ 10 июля 2018

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

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

0 голосов
/ 04 июля 2018

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

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

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

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

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

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

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

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

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

...