В целом у нас около 2 запросов в секунду. Однако после того, как мы отправили уведомление 3000 пользователям, мы неожиданно получили 120 запросов в секунду. К сожалению, около половины этих пользователей получали ошибки сервера 5XX, то есть половина пользователей, которые приходили, получали пустые страницы. После того, как реклама исчезла, больше не было ошибок сервера.
Я провел некоторое исследование, и кажется, что это из-за времени запуска, которое слишком долго запускалось для экземпляра и, следовательно, прерывалось. Я проверил номер своего экземпляра, было создано до 90 экземпляров, но количество активных экземпляров упало с 40 до 0 через секунду. Эта проблема возникала только при внезапном увеличении количества запросов, но я думал, что механизм приложений должен был справиться с таким увеличением.
Мой вопрос, как я могу решить эту проблему? Или где я должен продолжать копать, чтобы найти корень проблемы. Заранее спасибо!
Какие коды 5XX, где вы видите?
У меня возникла проблема с загадочным зависанием экземпляров & умирает при запуске:
Экземпляр ядра приложения мгновенно умирает, блокируя отложенные задачи до истечения 10 минут
Это было из-за сторонней библиотеки, которую я использовал, которая пыталась привязать порт во время создания экземпляра, и я закончил редактировать исходный код этой библиотеки.
Я также испытывал сбои после того, как экземпляр отправил свое ~ 20-е push-уведомление в APNS из-за утечки памяти в версии ssl-библиотеки python для движка приложений.
Ваша проблема немного отличается от этих, но шаги по ее устранению ощущаются одинаково:
Продолжение процесса устранения, подобного этому, должно привести вас к тому, что вызывает проблему, исключив все, что не вызывает проблему.
Вы также можете сделать это в обратном направлении, начав с проекта типа «Здравствуй, мир» и систематически копировать фрагменты вставки кода своего приложения до тех пор, пока проблема не начнется.
Если у вас высокий трафик, возможно, сейчас самое время запустить нагрузочные тесты. Постарайтесь максимально точно симулировать трафик в реальном мире и постарайтесь найти узкие места, используя Трассировка Stackdriver или путем профилирования обработки запросов в вашем коде и операциях с базой данных.
Также проверьте настройки масштабирования вашего проекта в файле yaml, особенно эти параметры:
automaticScaling:
coolDownPeriod: 120s
cpuUtilization:
targetUtilization: 0.5
maxTotalInstances: 8
minTotalInstances: 1
Спасибо всем за помощь, я разобрался с проблемой.
Благодарность принадлежит Дану Корнилеску, его комментарии дали мне подсказки, чтобы найти корень проблемы, потому что мне не хватало min_idle_instances. Как только я установил достаточное количество min_idle_instance в моем разделе автоматического масштабирования в app.yaml, я не получил никаких ошибок сервера 5XX.