java - 为什么即使我设置了 min idle=1 和 pending latency=max,GAE 仍生成新实例?

标签 java google-app-engine

我有一个低/零星负载的应用程序,启动新实例(大约 10 秒)导致的延迟远远超过处理我的请求所需的时间,通常在 500 毫秒内完成。

所以为了避免新实例的产生(“加载请求”)导致的延迟峰值,我做了以下两个设置:

  • 设置 min idle instances = max idle instances = 1,以确保始终有一个实例在运行(一个实例足以处理我的流量);和
  • 将挂起延迟设置为 15 秒,这样 GAE 最多等待 15 秒让一个驻留实例空闲,而不是启动一个新实例。

计费已激活。但是,GAE 仍会启动新实例,从而导致 Not Acceptable 延迟。这是为什么?

在日志中我可以看到我的请求总是在不到 500 毫秒内返回;一个请求不可能排队长达 15 秒。

我该怎么办?非常感谢任何帮助。

更新:我的解决方案是设置一个 cron 作业,每 5 分钟发出一个请求,以始终运行一个动态实例。事实证明(请参阅下面的答案),空闲实例是为疯狂的负载峰值保留的,而不是我 99% 的时间都处于的低负载场景。

最佳答案

正如@koma 所说,app-engine 将创建一个动态实例以保持空闲实例的数量不变,但它不仅会创建一个新实例,而且还会立即使用它,而不是平均使用空闲实例.如果您有一堆空闲实例,应用引擎实际上仍然会更喜欢启动动态实例,即使是在单个请求进入时也是如此,并且会“保存”空闲实例以防出现疯狂的流量高峰。

这是非常违反直觉的,因为您希望它使用已经闲置的实例来为请求提供服务,并为 future 的请求启动动态实例,但这不是它的工作方式。

关于java - 为什么即使我设置了 min idle=1 和 pending latency=max,GAE 仍生成新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388974/

相关文章:

java - 编写递归方法来计算具有 n 个元素和 k 个组的组数

java - 数字文字后缀的编码约定?

google-app-engine - 将 Grails 应用程序移植到 GAE

google-app-engine - Google App Engine Memcache API 配额

google-app-engine - 发出 http 请求 google app engine

Java程序写入后无法使用文件写入

java - IBM WebSphere 部署 Angular 5 应用程序并在刷新时获取 404

python - 使用 UrlFetch 时无法处理 DeadlineExceededError

google-app-engine - 你能删除appengine项目吗?

java - Amazon AWA - 未发现类 Def 异常