1

我正在谷歌云应用引擎中部署我的 nodejs 应用程序,但它给出了错误 此请求导致为您的应用程序启动一个新进程,从而导致您的应用程序代码首次加载。因此,与您的应用程序的典型请求相比,此请求可能需要更长的时间并使用更多的 CPU。-- 提出请求时。

我也看到了一些 stackoverflow 的答案,但它们对我没有用。

我的app.yaml有这个配置

运行时:nodejs10

谁能帮我吗

4

2 回答 2

1

您可以将以下内容添加到您的 app.yaml 中:

inbound_services:
- warmup

然后实现一个处理程序来捕获所有预热请求,这样您的应用程序就不会得到全部负载。完整的解释在这里给出。可以在此处找到有关此主题的另一篇详细帖子。

此外,您还可以添加自动缩放选项。您可以与那些玩一点,以找到最适合您的应用程序。尤其是与延迟相关的变量很重要。值得注意的是,它们可以在标准 GAE 环境中设置。

automatic_scaling:
  min_idle_instances: automatic
  max_idle_instances: automatic
  min_pending_latency: automatic
  max_pending_latency: automatic

更多缩放选项可以在这里找到。

于 2020-02-18T10:49:57.447 回答
1

“请求导致启动新进程”通知通常发生在您的应用程序中没有预热请求时。

您能否尝试实现一个仅在应用程序预热时返回就绪状态的运行状况检查处理程序。这将允许您的服务在准备好之前不会接收流量。

警告:使用 /_ah/health 路径的旧版运行状况检查现已弃用,您应该迁移以使用拆分运行状况检查。

在这里您可以找到Nodejs 的拆分健康检查

活性检查

活动性检查确认 VM 和 Docker 容器正在运行。被认为不正常的实例将重新启动。

  path: "/liveness_check"
  check_interval_sec: 30
  timeout_sec: 4
  failure_threshold: 2
  success_threshold: 2

准备检查

就绪检查确认实例可以接受传入请求。未通过就绪检查的实例不会添加到可用实例池中。

  path: "/readiness_check"
  check_interval_sec: 5
  timeout_sec: 4
  failure_threshold: 2
  success_threshold: 2
  app_start_timeout_sec: 300

编辑

对于 App Engine Standard,它无法为您提供灵活性,导致提前终止或频繁重启的硬件和软件故障可能会在没有事先警告的情况下发生。关联

App Engine 尝试让手动和基本扩展实例无限期地运行。但是,目前无法保证手动和基本扩展实例的正常运行时间。导致提前终止或频繁重启的硬件和软件故障可能会在没有事先警告的情况下发生,并且可能需要相当长的时间才能解决;因此,您应该以能够容忍这些故障的方式构建您的应用程序。

以下是一些避免实例重启导致停机的好策略:

减少实例重启或新实例启动所需的时间。

对于长时间运行的计算,请定期创建检查点,以便您可以从该状态恢复。

您的应用程序应该是“无状态的”,以便实例上不存储任何内容。

使用队列执行异步任务执行。

如果您将实例配置为手动扩展:在 > 多个实例之间使用负载平衡。配置比处理正常流量所需的更多实例。编写在手动扩展实例不可用时使用缓存结果的回退逻辑。

实例正常运行时间

于 2020-02-18T11:02:07.583 回答