8

所以我已经使用应用引擎很长一段时间了,没有任何问题。我知道,如果应用程序有一段时间没有被访问者点击,那么实例将关闭,第一个访问该站点的访问者将有几秒钟的延迟,而新实例会启动。

但是,最近似乎这些实例只能在很短的时间内保持活动状态(有时不到一分钟),如果我有 1 个实例已经启动并运行,并且我刷新了一个应用程序网页,它仍然会启动另一个实例(它开始的页面是最小的主页 HTML,不应该需要太多的 CPU/内存)。查看我的日志,它不断启动新实例,这是以前从未有过的。

关于我应该看什么的任何提示,或者关于为什么会发生这种情况的任何想法?

另外,我正在使用 Python 2.7、线程安全、python_precompiled、预热入站服务、NDB。

更新:

所以我将我的应用程序更改为至少有 1 个空闲实例,希望这能解决问题,但即使一个常驻实例已经在运行,它仍在启动新实例。因此,当只有 1 个常驻实例(除了我之外我没有获得任何流量),并且我转到我的应用程序的另一个页面时,它仍在启动一个新实例。

此外,正如 koma 指出的那样,我将 Pending Latency 更改为 1.5s,但这似乎没有帮助。

实例的内存使用量总是在 53MB 左右,当被调用的页面没有做太多事情时,这是令人惊讶的。我正在使用 F1 前端实例类,它的限制为 128,但无论哪种方式,53MB 似乎都很高。首次启动时,这是可以接受的尺寸吗?

更新 2:我刚刚在仪表板中注意到,在过去 14 小时内,请求 /_ah/warmup 以 24 404 个错误响应。这可能有关系吗?为什么他们会以 404 响应状态响应?

主要问题:为什么它会不断启动新实例(即使没有流量)?特别是在已经存在实例的情况下,为什么它们会这么快关闭?

4

3 回答 3

4

我对此的解决方案是增加Pending Latency时间。

如果网页一次触发 3 个 ajax 请求,则 AppEngine 正在为其他请求启动新实例。配置最小挂起延迟时间 - 将其设置为 2.5 秒后,同一个实例正在处理所有三个请求并且吞吐量是可以接受的。

我的项目仍然很少有负载/流量......所以除了提高 Pending Latency 之外,我在 Pingdom 开设了一个帐户并将其配置为每分钟 ping 我的 Appengine 项目。

两者的结合使我有一个实例保持活动状态并且大部分时间都在为所有请求提供服务。它会在真正需要时扩展到新实例。

于 2013-01-17T11:09:57.327 回答
1

1 个空闲实例意味着 app-engine 将始终为下一个出现的用户启动一个额外的实例 - 这就是为什么您会看到一个额外的实例被该设置启动。

如果您删除空闲实例设置(或使用默认设置)并且只是增加挂起延迟,它应该在触发额外实例之前“等待”。

关于主要问题,我认为@koma 可能会说使用默认设置,即使请求来自同一个会话,应用程序引擎也会倾向于触发额外的实例。

以我的经验,应用引擎在交通繁忙的情况下非常出色,但在交通流量低的情况下很难(有时甚至令人沮丧)。特别是很难弄清楚启动新实例的标准的细微差别实际上是什么。

就个人而言,我有一个“唤醒” cron-job 每隔几分钟就会启动一个实例,以确保如果有人访问该站点,则该实例已准备好服务。这并不理想,因为它会吃掉我的报价,但它大部分时间都有效,因为我的应用程序上的流量相当高。

于 2013-01-19T16:29:50.240 回答
0

我在美国东部标准时间 2 月 4 日星期一晚上 10 点左右才开始遇到此类问题,并且一直持续到现在。我首先开始注意到实例不断启动和关闭,并且延迟显着增加。似乎实例调度程序关闭空闲实例的速度过快,并导致随后的颠簸。

我将最小空闲实例设置为 1 以稳定延迟,这很有效。但是,仍然存在新实例的颠簸。我尝试了此线程中的建议以仅设置最小挂起延迟,但这无济于事。最终,空闲实例被关闭得太快了。然后,当需要它们时,延迟会在尝试启动新实例时迅速增加。

我不知道你为什么在几周前看到了这个,而且它只是在我几天前才开始的。也许他们逐渐将新的实例调度程序分阶段提供给客户?您还没有看到实例快速关闭吗?

于 2013-02-07T02:06:25.450 回答