内存使用情况是Google App Engine上实例stream失的主要原因?

尽pipe请求速率在2.4k RPS下稳定了2小时,但每30分钟一次,我遇到了急剧下降和峰值。 在许多实例同时closures之后,定期会有很多预热请求。 由于大量的空闲实例,这也增加了我们的运营成本。

  • App Engine版本:1.8.1
  • 实例总数:共235名(15名居民)
  • 平均QPS:9.143
  • 平均延迟:135.5毫秒
  • 平均内存:157.9 MB

应用程序的性能设置仍处于默认状态(F1实例,最小/最大挂起延迟以及最小/最大空闲实例仍处于自动状态)。

我将很快在F2实例上重新运行相同的testing。 同时:

  • 这是GAE上的一个已知问题吗?
  • 这是由F1的内存消耗过高造成的吗?
  • 除了去F2s,我能做些什么来解决这个问题?
  • 如何使用F1实例的平均内存高于128 MB?

实例计数[F1] 在这里输入图像说明 RPS [F1] 在这里输入图像说明 内存使用总量(MB)[F1] 在这里输入图像说明

在F2实例上运行testing后更新

在testing的第一个2小时内,客户stream失率显着降低。 实例计数显着更稳定。 在testing的最后2小时,实例数从250增加到600,尽pipe请求率稳定在2.4k RPS。

实例计数[F1 vs F2] 在这里输入图像说明 RPS [F1 vs F2] 在这里输入图像说明 总内存使用量(MB)[F1 vs F2] 在这里输入图像说明 毫秒每个请求[F1对F2] 在这里输入图像说明

这些信息部分来自于Google的说法,而且从我自己的经验来看,我不是Google员工。

我发现谷歌的前端内存需求是模糊的目标,通常不是硬性的限制,这将导致大多数用户持续的GC,因为大多数应用程序可能会超过它。 我发现他们的实际限制大约是170MB之前,实例通常有被悄悄closures的风险(我已经注意到这可能会偶尔运行到200MB左右,所以我认为他们有一个周期性的背景实例收割线程来做这个工作 – 这是假设的我没有证据certificate这样做)。 如果一个实例看起来是内存不足,我拥有服务器,我知道我会考虑杀死这个进程。

我会检查你的实例大部分实际使用了多less内存,因为这可能是导致实例被全部杀死的原因。

当使用F2时,你的服务器能够启动和处理请求,速度是F1的两倍,导致更less的实例,并且由于更高的内存限制,更less的机会被杀死(再次,我认为这与我运行一些企业级应用程序)。

另外请注意,谷歌目前正在推出(或RCtesting?!!)从他们的服务器更新从GAE 1.8.1到1.8.2,这可能会影响像我们这样的应用程序,是我find你的post的原因,我们看到随机内存caching和5-20秒的响应延迟返回完全前端memcached响应,通常会在<10毫秒内完成(与networking延迟<80毫秒)。 在这个推出过程中,不要忘记每个虚拟机/机器运行实例也需要进行升级以及为其他应用程序提供服务。

如果这种情况持续了几个小时,我们将收集证据并要求赔偿费用 – 我build议其他人也这样做,请记住… Google以系统可靠性而自豪, 这是重中之重 。