Приложения Spring Boot продолжают перезапускаться в App Engine Flexible

У меня есть несколько служб Spring Boot, которые отлично работают локально, но перезапускаются через случайное время в Google App Engine Flexible. Эти сервисы используют Google Cloud SQL и Pub / Sub с помощью библиотек Spring Boot.

Когда я развертываю службы, они работают нормально, но через некоторое время App Engine перезапускает их. Я подключил их к экземпляру Spring Boot admin, и я не вижу ничего странного в куче, дисковом пространстве или в чем-либо из этого. Иногда они перезагружаются через несколько часов, иногда быстрее.

Я попытался настроить ведение журнала для отслеживания ведения журнала, и кажется, что службы перезапускаются быстрее.

Я также заметил, что проверка работоспособности часто вызывается, хотя в конфигурации проверки работоспособности по умолчанию указано, что она должна быть 5 минут и несколько неудачных последовательных проверок работоспособности конфигурация yaml приложения Google. Но я никогда не вижу в журналах неудачных проверок работоспособности.

Я вижу, что проверки работоспособности проходят успешно (200 ответов), а затем внезапно запись останавливается, и через пару минут я вижу

Start command: java -showversion -agentpath:/opt/cdbg/cdbg_java_agent.so=--log_dir

это означает, что движок приложения пытается снова запустить приложение.

App.yaml выглядит так: runtime: java env: flex service: x-service resources: memory_gb: 1.0 automatic_scaling: min_num_instances: 1 max_num_instances: 2 env_variables: SPRING_PROFILES_ACTIVE: "dev" liveness_check: path: "/actuator/health" readiness_check: path: "/actuator/health"


person Geert Olaerts    schedule 07.11.2018    source источник
comment
не могли бы вы поделиться своим app.yaml?   -  person sanchezdale    schedule 07.11.2018
comment
конечно, добавил. Ничего особенного   -  person Geert Olaerts    schedule 08.11.2018
comment
Извините за задержку, ваше приложение все еще доступно, когда вы ставите паузу в журналах, или когда вы видите этот журнал команд запуска ...?   -  person sanchezdale    schedule 09.11.2018


Ответы (1)


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

Я также заметил, что проверка работоспособности часто вызывается, хотя в конфигурации проверки работоспособности по умолчанию указано, что она должна быть 5 минут и несколько неудачных последовательных проверок работоспособности, конфигурация yaml приложения Google. Но я никогда не вижу в журналах никаких неудачных проверок работоспособности.

Это нормальное поведение из-за избыточных средств проверки работоспособности Google:

Частота проверки работоспособности

Для обеспечения высокой доступности App Engine создает избыточные копии каждой программы проверки работоспособности. Если проверка работоспособности дает сбой, резервная может незамедлительно взяться за дело.

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

У меня есть несколько служб Spring Boot, которые отлично работают локально, но перезапускаются через случайное время в Google App Engine Flexible. Эти сервисы используют Google Cloud SQL и Pub / Sub с помощью библиотек Spring Boot.

Когда я развертываю службы, они работают нормально, но через некоторое время App Engine перезапускает их. Я подключил их к экземпляру Spring Boot admin, и я не вижу ничего странного в куче, дисковом пространстве или в любом из них. Иногда они перезагружаются через несколько часов, иногда быстрее.

Если посмотреть на то, как GAE управляет экземплярами, это может быть нормальным поведением, пока ваше приложение продолжает отвечать на запросы. Используя automatic_scaling, вы определяете динамические экземпляры. Динамические экземпляры включаются / выключаются в зависимости от получаемой ими нагрузки. Итак, вы можете увидеть автоматическое масштабирование в действии. Переход к 2 экземплярам, ​​затем обратно к одному и так далее.

Я предлагаю вам проверить это, либо увеличив порог по умолчанию target_utilization до чего-то вроде 0.9, и посмотрите, часто ли он масштабируется. Или просто используйте manual_scaling, чтобы у вас были только резидентные экземпляры. Причина тестирования с этим заключается в том, что журналы, которые вы видите, могут быть ожидаемым поведением управления экземпляром движка приложения. так как ваше приложение нормально реагирует на проверки работоспособности и готовности, и вы упоминаете, что использование памяти не показывает ничего необычного, то я не могу придумать ничего другого, что могло бы вызвать это, кроме функции автоматического масштабирования.

Надеюсь, это поможет!

Источники:

https://cloud.google.com/appengine/docs/fflexible/java/reference/app-yaml https://cloud.google.com/appengine/docs/fflexible/custom-runtimes/configuring-your-app-with-app-yaml https://cloud.google.com/appengine/docs/fflexible/java/how-instances-are-managed

person sanchezdale    schedule 09.11.2018
comment
Привет, служба, похоже, не отвечает на запрос. мы даже изменили настройки, чтобы иметь максимальное и минимальное значение экземпляра 1, а затем служба также перестает работать. даже с минимальным экземпляром 1 и максимальным экземпляром 2 служба, похоже, не работает. Когда мы смотрим в stackdriver, единственные всплески процессора, которые мы видим, - это во время запуска. - person Geert Olaerts; 12.11.2018
comment
А у вас в логах приложений вроде нормально все? - person sanchezdale; 12.11.2018
comment
да, даже поместите это в журнал трассировки и ничего особенного или ошибок, которые мы могли бы увидеть. - person Geert Olaerts; 13.11.2018