spring-based GAE程序启动慢的问题

本文探讨了在Google App Engine (GAE) 上部署基于Spring的应用遇到的性能问题,特别是首次加载时间较长的情况。文中提到通过使用预编译优化可以减少加载时间,并介绍了团队针对大型依赖如Groovy和JRuby所做的进一步优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过漫长的开发过程,我开发的一个基于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 Java runtime. Many of you have complained about hard-to-predict DeadlineExceededExceptions, or unexpectedly slow requests that use a high amount of CPU. These issues often have the same root cause: App Engine is preparing a new instance of your code to respond an incoming request. We call this occurrence a "loading request". Since App Engine provides server resources on demand, there are several reasons why you might experience a loading request:

  1. You just uploaded a new version of your application.
  2. Your application may have gotten no traffic recently.
  3. 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 a production app receiving even a very small but steady amount of traffic, loading requests are relatively infrequent.

As an application developer, you can influence the length of your loading requests by controlling the amount of work done initializing your application and its dependencies. The App Engine team has also been working diligently on the Java runtime to reduce the time spent in loading requests.

First, we're introducing a new class-loading optimization in 1.2.8 called precompilation. Precompilation makes loading requests faster by doing class-loading work ahead of time in the App Engine environment. We've seen significant improvements with precompilation, but we've left it opt-in by default for 1.2.8. You can enable it for your application by adding precompilation-enabled to your appengine-web.xml:

<precompilation-enabled>true</precompilation-enabled>

Second, we've been profiling applications with longer loading requests. Often they include large dependencies like Groovy and JRuby. We're working directly with those teams to improve startup by spotting and reducing unnecessary initialization .

Finally, we're continuing to work on additional startup improvements we hope to unleash on the Java runtime in the future, and make it easier to identify loading requests in application logs. We will continue to pay close attention to performance issues that both Java and Python developers 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.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值