2012-09-12 21 views
4

我使用GAE为我的小服务。我每天只有3或4个客户,而且从不在同一时间。 我的服务是用Java编写的,具有Spring MVC,spring security和objectify。 所以启动时间可能需要15到20秒。为什么一个客户刚刚在GAE上创建一个新的实例在热身请求

为了避免我的客户这个启动延迟激活我的帐单和设定分钟空闲实例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

任何人都可以确认,如果这两个问题是相关的?

THX

塞缪尔

回答

0

我不知道我能正确地回答你的问题,但我会尽我所能,让你在正确的轨道上。

预热请求是由前“活”的请求被发送到你的应用程序实例的应用程序服务器调用。这是一个机会,可以调用/初始化尽可能多的代码,以便将其加载到内存中。当“实时”请求触及你的应用程序时,它会很快执行。看看你的日志,对/myIndex.do的请求需要14s才能执行。按照任何标准这是相当长的。

这使我建议如下:

  1. 揣摩哪些库要导入导致请求那么长。确定之后,确保您在预热处理程序中加载/使用它们。
  2. 如果它不是一个库加载问题,这意味着你正在做一大堆的处理您的请求。我建议将它的一部分委托给异步处理程序(使用AJAX)。
  3. 最后,你可以一个计划任务来调用您的定期/myindex.do(每分钟左右),以确保它是“热”。
+0

不起作用。谷歌确认这是一个错误 – Samuel

+0

你对热身要求的想法是正确的,但对问题中描述的情况错误。对index.do的请求的日志条目清楚地声明“loading_request = 1”,表明这些请求是针对新实例并且不使用现有的('暖')。这些请求需要15-19秒,因为这些新实例必须首先启动。 –

相关问题