5
votes

I have a Google App Engine app using Java and Spring MVC 3.0. A lot of the time if it goes even 2 minutes without a request, then the next request is a loading request which takes about 12 seconds to respond to and uses about 5 seconds of CPU time. Sometimes it does a loading request even when there was no traffic for only one minute.

Google says once there is a steady flow of traffic to your site then you won't have to worry about it, but even if I had a steady flow, there would probably still be times when I went without traffic for 1 minute.

Is this a normal amount of idle time for the JVM instance to be deactivated?

EDIT: After investigating I found that JDO initialization is the part that takes the most amount of time (~6 seconds). And after I turned component-scan off of spring, and manually specified the controllers, spring setup time went down to 1.5 seconds. If I don't use jdo on a loading request, then loading request response time is a more reasonable ~3 seconds instead of ~12 seconds.

What would be nice is we could serialize the DispatcherServlet to the memcache.

2
man stack overflow gets indexed by google fast. This page is already number 2 on google search for app engine loading requests. - Kyle

2 Answers

1
votes

There has been a fix by the Google team, and now loading requests are only happening every 10 minutes or so, which is much more reasonable.

0
votes

Current evidence seems to point towards AppEngine recycling your application's resources after rather short idle periods, and that can definitely be a major hardship for applications like yours that have lengthy boot-up times. I am currently unaware of any solution to this problem.