【问题标题】:Why are App Engine instances shutting down with a "start" message?为什么 App Engine 实例会关闭并显示“启动”消息?
【发布时间】:2021-03-02 16:01:09
【问题描述】:

我的 App Engine 标准环境 Python 3 应用程序中出现很多此类错误。应用程序似乎已初始化并且工作正常:我在初始化期间看不到任何类型的故障。

如何找出原因?尽管这个日志说了什么,它会是普通的实例缩减吗?

 Start program failed: termination triggered by nginx exit

 [INFO] Shutting down: Master 
 Worker exiting (pid: 20)

 [INFO] Worker exiting (pid: 23)
 Handling signal: term

 Quitting on terminated signal

我连续看到许多此类关闭错误,表明多个实例正在关闭。因此,从 1 到 0 实例的最后一步不是相关的。

app.yaml如下:

runtime: python39
service: iris3

env_variables:
  TOKENPS: 54

【问题讨论】:

  • 能否请您提供一个 App.yaml 的示例,可能存在配置错误,例如 min_instances 选项
  • 我将它添加到问题正文的底部。
  • 我进行了一些研究,该错误最常见的根本原因是 app.yaml 中的扩展配置。您可以尝试在您的 yaml 文件中使用min_instances: 1 吗?如果您对其他缩放选项有疑问,这里是官方documentation。如果这对你有用,请告诉我
  • 谢谢。但是,我想使用 AppEngine 的归零功能。这些线是否真的表明存在问题。一些讨论暗示这可能是作为缩减的一部分的普通关闭,而不是日志中所说的初始化期间的崩溃。 stackoverflow.com/questions/61323488你能发送链接到你的研究发现吗?我没有找到太多。
  • 另外,我连续看到许多此类关闭错误,表明多个实例正在关闭。因此,从 1 到 0 实例的最后一步不是相关的。

标签: google-app-engine


【解决方案1】:

我测试了一个Hello World的例子,发现这是实例缩容时的普通日志。

日志应该被认为是一个错误。它清楚地表明 start - 即初始化 - 失败了,实际上没有任何失败,这涉及关闭而不是启动。

【讨论】:

  • 继续调查,我发现运行时返回204时也有bug,也许这才是真正的根本原因。如果您可以分享您的 Hello World 实验,那么尝试和复制可能会很棒。
  • 我只是拿了标准的 Python 中的 Hello World,在请求方法中添加了time.sleep(10),在 100 个并行进程中用 curl 命中它。而已。当然,App Engine 添加了更多实例,然后按比例缩小。
【解决方案2】:

这是一个预期的行为,实例开始shut down 以响应某些事件,例如超过空闲实例的数量并且它们不再处理请求。

该日志消息对应于 GAE 环境发送到应用容器的 SIGTERM 信号。完整的日志消息表示终止所有进程和实例所采取的步骤

【讨论】:

  • 当然,关机是预期的行为,如问题中所述。但是说有一个失败,更糟糕的是,失败是在initialization(“开始”)的消息是高度误导的。
【解决方案3】:

检查您是否返回 204 状态,它可以关闭您的实例, 是gunicorn的一种bug,可以看here

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2012-05-02
    • 2011-08-10
    相关资源
    最近更新 更多