0

当任何单个请求进入时,我都会收到此警告。似乎该进程将在处理请求后立即关闭。

由于我无法发布图像,我将复制并粘贴一些日志。

2012-11-25 09:12:37.441 /task/process-block 200 1609ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
I 2012-11-25 09:12:37.440 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This requ...

2012-11-25 09:12:26.054 /task/process-block 200 2160ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
I 2012-11-25 09:12:26.053 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This requ...

2012-11-25 09:12:14.036 /task/process-block 200 3156ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
I 2012-11-25 09:12:14.036 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This requ...

据我了解,当没有请求进入时,一个处理应该至少停留 15 分钟,但上面的日志显示该进程被杀死的时间不超过 10 秒。目前我只能看到一个动态类型的实例(在我签出时我看不到任何实例运行前几个小时),即使它完成了前一个实例的处理,该实例也不会响应请求。相反,将生成一个新实例并响应请求。

是bug还是设置问题?我的应用程序使用 python 2.7 线程安全,我将最大空闲实例设置为 1,将最小挂起延迟设置为 15.0s。

更新:

我将 Max Idle Instances 更改为 50,问题仍然存在。

4

1 回答 1

0

运行两天后,问题消失。被推入队列的任务是一项相当耗时的任务,因为它需要从互联网上检索一些数据,通常需要 1 秒以上。

现在任务的运行时间平均减少到200ms,因为它已经赶上了数据生产者,所以大部分时间它只是发现没有更多的数据需要处理并返回。

所以我猜测当GAE收到一个请求时,它会先预测这个请求是否能在1秒内完成。如果答案是肯定的,GAE 将使用现有的流程来处理它;否则它将启动一个新进程并保留旧进程以处理其他短时请求。这可以解释为什么总是有一个新进程,这也可以解释为什么某些实例有相当长的年龄但没有处理很多请求。

于 2012-11-27T15:34:35.570 回答