什么可能导致App Engine请求中未跟踪时间的高度可变性?

时间:2016-05-18 18:26:35

标签: google-app-engine google-cloud-datastore

我刚对我的应用运行了负载测试。我注意到两个相同请求的延迟有一些非常大的变化:3秒与30秒。当我挖掘痕迹时,我发现了以下内容:

|                      | Traced (ms) | Untraced (ms) |
|----------------------+-------------+---------------|
| High-latency Request |         193 |         29948 |
| Low-latency Request  |         305 |          2934 |

以下是跟踪的屏幕截图:

整体潜伏期低

Low-latency Request

总体潜伏期高

High-latency Request

我无法理解运行时性能的10比1差异。

我只在负载下看到这些高延迟请求。我的代码中的某些内容可以解释这种可变性(假设两个请求都遵循相同的代码路径)吗?

2 个答案:

答案 0 :(得分:1)

根据我的经验,那些非常高的延迟是由一个新的实例启动引起的。 AppEngine Google Group中有一个关于类似问题的讨论:https://groups.google.com/d/msg/google-appengine/MBveo1KSTyY/mkYdyCmfAgAJ

你可以做两件事:

  1. 通过减少应用程序的总体大小(代码,库,资源)和大量使用延迟初始化来减少实例启动所需的时间。使用更高的实例类也可能有所帮助(更强的实例启动速度更快)
  2. 调整缩放选项:始终有一个(或两个)空闲实例,因此无需等待实例在流量峰值期间启动
  3. 希望有所帮助。就我而言,使用更高级的实例类已经帮助了很多!

答案 1 :(得分:0)

我也有这个问题,谷歌支持建议减少max_concurrent_requests。当时的假设是CPU受到限制。减少它后,延迟总体上变得更好。我仍然不确定发生了什么,因为我没想到应用程序会使用那么多的CPU。遗憾的是,没有工具可以在GAE上分析CPU以确定CPU密集部分的位置