4

我们有一个平均每秒处理 0.5 个请求的 App Engine 应用程序,并且似乎所有这些请求都可以由运行 Go 应用程序的同一个实例作为主版本来处理。

但是,有时 App Engine 会启动第二个实例(有时甚至是第三个),除了处理一个或两个请求之外,这似乎没有任何作用。这是一个例子。

在此处输入图像描述

手动关闭该实例似乎不会造成任何伤害,所以我的问题是,为什么 App Engine在一段时间没有收到任何请求后没有杀死该实例?(上面的示例在过去一小时内有四个请求,通常请求/年龄比率会更低)。

更新:

类似的情况是在不同版本上启动实例时。App Engine 似乎只是在几个小时没有收到任何请求后才杀死实例。

在应用程序设置 → 性能下,

  • 空闲实例设置为自动 - 20
  • 待定延迟设置为150ms – 250ms
4

2 回答 2

4

我希望我知道什么控制它是否/何时杀死空闲实例,但我看不到它的任何文档。

为了避免启动过多的实例,我认为您可以在这里做的主要事情是增加挂起的延迟

Pending Latency 滑块控制请求在由应用程序的默认版本的实例提供服务之前在待处理队列中花费的时间。如果最小挂起延迟很高,App Engine 将允许请求等待而不是启动新实例来处理它们。这可以减少您的应用程序使用的实例小时数,但会导致更多用户可见的延迟。

即使你平均每小时只有 4 个请求,如果你碰巧有两个间隔很近,我想它可能会启动一个新实例。

您还可以在日志中看到一些关于它启动新实例的原因的少量信息。

于 2014-04-21T04:10:05.487 回答
2

Google App Engine 文档“应用程序扩展方式”部分指出:

实例扩展

每个实例都有自己的传入请求队列。App Engine 监控每个实例队列中等待的请求数。如果 App Engine 检测到应用程序的队列由于负载增加而变得过长,它会自动创建应用程序的新实例来处理该负载。

App Engine 还会在请求量减少时反向扩展实例。这种扩展有助于确保您的应用程序的所有当前实例都被用于优化效率和成本效益。

它还指出您可以“指定最小数量的空闲实例”,并在管理控制台中“针对高性能或低成本进行优化”。

尝试将“空闲实例”字段设置为 3 - 5 之类的值,并“针对低成本进行优化”,看看这是否会影响实例终止时间。

于 2013-07-24T10:33:44.107 回答