在与另一家也使用App Engine的公司的同事进行了讨论之后,他告诉我他设法通过以下步骤将应用程序的预热时间从〜15秒减少到了〜5秒:
配置Eclipse,以将在编译过程中生成的类捆绑为一个JAR文件。 配置Eclipse以在App Engine部署期间上载此单个JAR文件,而不是上百个(或数千个)单独的Java类。
他认为,在实例热身期间,由于实例只需要加载单个捆绑的JAR文件,而不是数千个单独的类,因此热身将明显更快。有任何想法或意见吗?
我肯定想自己尝试一下,但是我没有足够的Eclipse- mojo来知道如何配置这些步骤。有谁知道如何配置Eclipse或Eclipse的Google插件来执行上述步骤?(当然,并确保已部署的应用程序在App Engine中成功运行)
谢谢,
如先前的回答所述,App EngineSDK支持打包WEB-INF/classes到jar文件中,该文件将以结尾WEB- INF/lib/_ah_webinf_classes-0000.jar。你可以激活这个
WEB-INF/classes
WEB- INF/lib/_ah_webinf_classes-0000.jar
使用带有选项的appcfg工具--enable_jar_classes。
--enable_jar_classes
通过配置WAR或EAR项目的属性来使用Google Eclipse插件:项目属性> Google App Engine>部署>“将WEB-INF /类打包为jar”
对我而言,在App Engine 1.9.4上,这仅导致实例启动方面的微小改进(约5-10%,如果有的话)。
请注意,这会将 所有 文件打包在WEB-INF / classs中(不仅是.class文件)。更改之后,在实例化过程中收到一条错误消息,内容是不再能够读取logging.properties文件;可能是因为当时尚未读取新的jar文件:
Unable to read the java.util.logging configuration file, WEB- INF/classes/logging.properties
解决方法是,我将appengine-web.xml中的路径更改为,WEB-INF/logging.properties并配置了maven-war- plugin将文件复制到该位置:
WEB-INF/logging.properties
<webResources> <resource> <directory>lib</directory> <targetPath>WEB-INF/lib</targetPath> </resource> <resource> <!-- Workaround: During GAE deployment, all files in WEB-INF/classes will be packaged into WEB-INF/lib/_ah_webinf_classes-0000.jar, which prevents the logging.properties referenced in appengine-web.xml from being read. --> <directory>src/main/resources</directory> <includes> <include>logging.properties</include> </includes> <targetPath>WEB-INF</targetPath> </resource> </webResources>