4

我将 GAE 用于我的小型服务。我每天只有 3 或 4 个客户,而且从不在同一时间。我的服务是用 Java 编写的,带有 spring MVC、spring security 和 objectify。因此启动时间可能需要 15 到 20 秒。

为了避免我的客户出现这种启动延迟,我激活了计费并将最小空闲实例设置为 1(最大为 1)。但即使使用这种配置,有时我的客户也必须等待 15 秒才能收到他们的第一个请求。

正如您在我的日志中看到的,在一个预热请求(从未使用过)之后,客户端启动了一个新实例(以后从未使用过):

示例 1:

2012-09-10 23:23:31.442 /myIndex.do 200 18997ms 15kb Mozilla
x.x.x.x - - [10/Sep/2012:14:23:31 -0700] "GET /myIndex.do HTTP/1.1" 200 15048 - "Mozilla" "www.mysite.fr" ms=18997 cpu_ms=10442 cpm_usd=0.001682 loading_request=1 instance=00c61b117c2e937c04807734919256d8a5cee8

2012-09-10 23:05:05.260 /_ah/warmup 200 14225ms 0kb
0.1.0.3 - - [10/Sep/2012:14:05:05 -0700] "GET /_ah/warmup HTTP/1.1" 200 0 - - "3.360029581669528772.mywebsite.appspot.com" ms=14225 cpu_ms=8969 loading_request=1 instance=00c61b117c10680b3f12b4c8f80f7b7191ce8bab

示例 2:

2012-08-31 18:51:16.096 /myIndex.do 200 14676ms 14kb Mozilla
x.x.x.x - - [31/Aug/2012:09:51:16 -0700] "GET /myIndex.do HTTP/1.1" 200 14954 "http://www.mysite.fr/myIndex.do" "Mozilla" "www.mysite.fr" ms=14676 cpu_ms=8514 cpm_usd=0.001671 loading_request=1 pending_ms=1022 instance=00c61b117cf69060fbcfbfe9dbd6ed735b869817

2012-08-31 18:39:43.895 /_ah/warmup 200 19812ms 0kb
0.1.0.3 - - [31/Aug/2012:09:39:43 -0700] "GET /_ah/warmup HTTP/1.1" 200 0 - - "3.360029581669528772.mysite.appspot.com" ms=19812 cpu_ms=10243 loading_request=1 instance=00c61b117c1d4303f8698a615149d5a40dcac7

让我担心的是,我已经有 4 个客户遇到此类问题:/

并且还发现了一个类似的问题 http://code.google.com/p/googleappengine/issues/detail?id=7865

谁能确认这两个问题是否相关?

谢谢

塞缪尔

4

1 回答 1

0

我不确定我能否正确回答您的问题,但我会尽我所能让您走上正轨。

在“实时”请求发送到您的应用程序实例之前,应用程序服务器会调用预热请求。这是您调用/初始化尽可能多的代码的机会,以便将其加载到内存中。当“实时”请求击中您的应用程序时,它会迅速执行。查看您的日志,对 /myIndex.do 的请求需要 14 秒才能执行。以任何标准来看,这都是相当长的。

这导致我提出以下建议:

  1. 尝试找出您正在导入的哪些库导致请求如此长。一旦确定了这一点,请确保在预热处理程序中加载/使用它们。
  2. 如果这不是库加载问题,则意味着您正在对请求进行大量处理。我建议将其中一些委托给异步处理程序(使用 AJAX)。
  3. 最后,您可以安排一个任务来定期(每分钟左右)调用您的 /myindex.do 以确保它是“热的”。
于 2013-03-20T02:20:35.890 回答