Google App Engine实例会快速关闭

时间:2013-01-17 03:47:27

标签: python google-app-engine python-2.7

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

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

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

另外,我使用的是Python 2.7,线程安全,python_precompiled,热身入站服务,NDB。

更新

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

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

实例的内存使用量总是大约为53MB,这在被调用的页面没有做太多时令人惊讶。我正在使用F1前端实例类,其限制为128,但无论如何,53MB似乎都应该做得很高。这是第一次启动时可接受的尺寸吗?

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

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

3 个答案:

答案 0 :(得分:4)

我的解决方案是增加等待延迟时间。

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

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

两者的结合使得我有一个保持活跃的实例,并且大部分时间都在提供所有请求。当真正需要时,它将扩展到新的实例。

答案 1 :(得分:1)

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

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

关于主要问题,我认为@koma可能会说,使用默认设置,即使请求来自同一会话,app-engine也会触发额外的实例。

根据我的经验,app-engine在交通繁忙的情况下非常棒,但在低流量条件下工作很困难(有时令人沮丧)。特别是要弄清楚实际启动新实例的标准的细微差别是非常困难的。

就个人而言,我有一个“唤醒”的cron-job来每隔几分钟调出一个实例,以确保如果有人来到该网站上,则一个实例已准备就绪。这不是理想的,因为它会吃我的报价,但它大部分时间都有效,因为我的应用程序上的流量相当高。

答案 2 :(得分:0)

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

我将最小空闲实例设置为1以稳定延迟,这有效。但是,仍然存在新的情况。我尝试了这个线程中的建议只设置了最小的挂起延迟,但这没有用。最终,空闲实例的关闭速度过快。然后,当他们需要时,延迟会在尝试启动新实例时出现。

我不确定你几周前为什么会看到这个,而且这只是几天前才开始的。也许他们逐渐将他们的新实例调度程序逐步推向客户? 您是否仍然没有看到实例快速关闭?