当前位置: 首页 > 面试题库 >

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

魏誉
2023-03-14
问题内容

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

  1. 配置Eclipse,以将在编译过程中生成的类捆绑为一个JAR文件。
  2. 配置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。你可以激活这个

  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>


 类似资料:
  • 我试图在编译AOSP时向Android添加一个预构建的jar。jar的名称是“nxpnfclib.jar”,我将其设置为aosp/prebuilts/misc/common/nxp。我还编写了一个Android.mk: 我想在aosp/packages/apps/settings中使用这个jar,所以我将nxpnfclib添加到aosp/packages/apps/settings/android

  • 我创建了一个Java应用程序,它使用运行库执行Python脚本。我想知道是否有一种方法可以将Python.exe和必需的库包含在Jar文件中?

  • 问题内容: 我已经用Java编写了Thrift服务器来利用特定的Java包/库,但是我不是Java程序员。 问题是; 我看到对服务器的第一个RPC调用超时。Subsequest请求的执行没有任何问题,它仅影响以某些(但必不可少)语言编写的客户端。 我当前的想法是服务器在响应上超时,因为在第一次调用时,服务器必须加载请求所需的所有库。一些Thrift客户端实现必须比其他实现更好地处理超时,这可能会使

  • 预热权重功能让客户端机器能够根据服务端的相应权重进行流量的分发。该功能也常被用于集群内少数机器的启动场景。利用流量权重功能在短时间内对服务端机器进行预热,然后再接收正常的流量比重。 1.服务端服务在启动时会将自身的预热时间,预热期内权重,预热完成后的正常权重推送给服务注册中心。如上图 ServiceB 指向 Service Registry 。 2.客户端在引用服务的时候会获得每个服务实例的预热权

  • 我使用Gradle在我的项目中生成jaxb类。一切都很好,但是在编组jaxb对象时,我们看到了不同的名称空间前缀,如ns1、ns2..随机出现在输出xml中。但是我们不希望这样,我们希望为每个名称空间指定特定的名称空间前缀。我检查了这里,发现链接15772478说我们必须有带有xmlns元素的package-info类,我怎么能对xjc绑定编译器说添加带有prifixes和namespaceURI

  • 如关联指南中简要提到的,预先加载是一次查询多个模型(一个"主"模型和一个或多个关联模型)的数据的行为. 在 SQL 级别上,这是具有一个或多个 join) 的查询. 完成此操作后,Sequelize 将在返回的对象中将适当关联的模型添加到适当命名的自动创建的字段中. 在 Sequelize 中,主要通过在模型查找器查询中使用 include 参数(例如,findOne, findAll 等)来完成