我有一些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"
答案 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