spring-based GAE程序启动慢的问题
经过漫长的开发过程,我开发的一个基于spring的GAE程序快能应用了。但是一发布,访问特别慢(大概30s左右)。这是因为spring首次启动需要很长的时间。而且几分钟不访问的话,gae会自动关闭。下次请求就会重新启动网站。
查了一下资料,如下:
根据官方的资料,采用percompilation之后,大概能有30%左右的速度提升。经过实际测试,确实会有性能的提升,但是启动速度还是不快(在gae压力小的时候大概20s,压力大的时候还需要30s)。 真正还是需要解决spring框架初始化的时间。
?
Tuesday, December 8, 2009
Request performance in Java
If you've been following the App Engine Java runtime group,you may have noticed some discussions about performance of the Javaruntime. Many of you have complained about hard-to-predictDeadlineExceededExceptions, or unexpectedly slow requests that use ahigh amount of CPU. These issues often have the same root cause: AppEngine is preparing a new instance of your code to respond an incomingrequest. We call this occurrence a "loading request". Since App Engineprovides server resources on demand, there are several reasons why youmight experience a loading request:
- You just uploaded a new version of your application.Your application may have gotten no traffic recently.Your traffic has become high enough to need another JVM to scale.
You can expect that during the course of developing your application,you will often experience the first two scenarios. In comparison, for aproduction app receiving even a very small but steady amount oftraffic, loading requests are relatively infrequent.
As an application developer, you can influence the length of yourloading requests by controlling the amount of work done initializingyour application and its dependencies. The App Engine team has alsobeen working diligently on the Java runtime to reduce the time spent inloading requests.
First, we're introducing a new class-loading optimization in 1.2.8called precompilation. Precompilation makes loading requests faster bydoing class-loading work ahead of time in the App Engine environment.We've seen significant improvements with precompilation, but we've leftit opt-in by default for 1.2.8. You can enable it for your applicationby adding precompilation-enabled to your appengine-web.xml:
<precompilation-enabled>true</precompilation-enabled>Second, we've been profiling applications with longerloading requests. Often they include large dependencies like Groovy andJRuby. We're working directly with those teams to improve startup byspotting and reducing unnecessary initialization.
Finally, we're continuing to work on additional startup improvements wehope to unleash on the Java runtime in the future, and make it easierto identify loading requests in application logs. We will continue topay close attention to performance issues that both Java and Pythondevelopers see, both through changes to our APIs and to our service.
For more information on how to understand the performance of your Java applications, check out the set of frequently asked questions we've collected and answered about performance characteristics of the Java runtime. Also check out Max Ross's recent post on the performance of the new != and IN filters in JDO and JPA.
?
?