Spring Boot应用程序会继续在App Engine Flexible

时间:2018-11-07 13:48:30

标签: spring-boot google-app-engine app-engine-flexible

我有一些Spring Boot服务,这些服务在本地可以正常运行,但是它们会在随机时间后在Google App Engine Flexible上重新启动。这些服务在Spring Boot库的帮助下使用google Cloud SQL和Pub / Sub。

当我部署服务时,它们可以正常工作,但过一会儿,它们就会被App Engine重新启动。我将它们连接到Spring Boot admin实例,但在堆或磁盘空间或任何这些中看不到任何奇怪的东西。有时它们会在几个小时后重新启动,有时会更快。

我尝试更改日志记录以跟踪日志记录,看来服务重新启动的速度更快。

我还注意到,健康检查被调用很多,即使健康检查的默认配置显示应为5分钟且连续两次健康检查失败google app yaml config。但是我从没有在日志中看到任何失败的运行状况检查。

我看到的是运行状况检查进行得很顺利(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"

1 个答案:

答案 0 :(得分:0)

因此,在进行了一些研究之后,我可能会帮助您解决问题。

  

我还注意到,健康检查被调用了很多,即使健康检查的默认配置显示应为5分钟,并且有两次失败的连续健康检查Google应用程序yaml配置。但是我从没有在日志中看到任何失败的运行状况检查。

由于Google冗余的运行状况检查器,这是正常现象:

健康检查频率

为确保高可用性,App Engine将创建每个运行状况检查器的冗余副本。如果运行状况检查程序失败,则多余的检查程序可以立即接管。

如果您检查应用程序的nginx.health_check日志,则可能还会看到运行状况检查轮询比配置更频繁,这是由于冗余的运行状况检查器也在遵循您的设置。这些冗余的运行状况检查程序是自动创建的,您无法对其进行配置。“

  

我有一些Spring Boot服务,这些服务在本地可以正常运行,但是它们会在随机时间后在Google App Engine Flexible上重新启动。这些服务在Spring Boot库的帮助下使用google Cloud SQL和Pub / Sub。

     

当我部署服务时,它们可以正常工作,但过一会儿,它们就会被App Engine重新启动。我将它们连接到Spring Boot admin实例,但在堆或磁盘空间或任何这些中看不到任何奇怪的东西。有时它们会在几个小时后重新启动,有时会更快。

看看GAE管理实例的方式,这可能是正常的行为,只要您的应用程序不断响应请求即可。通过使用automatic_scaling,您可以定义动态实例。根据实例所承受的负载来打开/关闭动态实例。因此,您可能会看到的是工作中的自动缩放。先转到2个实例,然后再返回一个,依此类推。

我会邀请您通过将target_utilization的默认阈值增加到0.9之类来进行测试,看看它是否经常扩展。或仅使用manual_scaling,以便只有常驻实例。进行此测试的原因是,您看到的日志可能是App Engine实例管理的预期行为。由于您的应用程序对运行状况检查和就绪状态的响应正常,并且您提到内存使用情况未超出正常范围,因此,除了自动缩放功能之外,我想不出其他任何可能导致此问题的原因。

我希望这会有所帮助!

来源:

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