一尘不染

配置Eclipse以将App Engine类预先捆绑到单个JAR中,以加快预热时间

java

在与另一家也使用App Engine的公司的同事进行了讨论之后,他告诉我他设法通过以下步骤将应用程序的预热时间从〜15秒减少到了〜5秒:

  1. 配置Eclipse,以将在编译过程中生成的类捆绑为一个JAR文件。
  2. 配置Eclipse以在App Engine部署期间上载此单个JAR文件,而不是上百个(或数千个)单独的Java类。

他认为,在实例热身期间,由于实例只需要加载单个捆绑的JAR文件,而不是数千个单独的类,因此热身将明显更快。有任何想法或意见吗?

我肯定想自己尝试一下,但是我没有足够的Eclipse-
mojo来知道如何配置这些步骤。有谁知道如何配置Eclipse或Eclipse的Google插件来执行上述步骤?(当然,并确保已部署的应用程序在App
Engine中成功运行)

谢谢,


阅读 208

收藏
2020-12-03

共1个答案

一尘不染

如先前的回答所述,App EngineSDK支持打包WEB-INF/classes到jar文件中,该文件将以结尾WEB- INF/lib/_ah_webinf_classes-0000.jar。你可以激活这个

  1. 使用带有选项的appcfg工具--enable_jar_classes

  2. 通过配置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将文件复制到该位置:

                <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>
2020-12-03