Java 两个实例,尽管使用并发请求和低流量

Java 两个实例,尽管使用并发请求和低流量,java,google-app-engine,wicket,Java,Google App Engine,Wicket,我的ApacheWicket web应用程序在GAE/J中使用JDO进行数据持久化 在应用程序启动时,主页在显示任务之前将其排队(默认ETA为零延迟)。此任务导致构建一个新的Wicket网页,以便构建JVM的singleton Persistence Manager Factory(PMF)实例,供应用程序在其生命周期内使用 我通过添加 <threadsafe>true</threadsafe> true 到应用程序的appengine-web.xml文件 尽管如此,

我的ApacheWicket web应用程序在GAE/J中使用JDO进行数据持久化

在应用程序启动时,主页在显示任务之前将其排队(默认ETA为零延迟)。此任务导致构建一个新的Wicket网页,以便构建JVM的singleton Persistence Manager Factory(PMF)实例,供应用程序在其生命周期内使用

我通过添加

<threadsafe>true</threadsafe>
true
到应用程序的appengine-web.xml文件

尽管如此,在一个访问应用程序主页的请求之后,我得到了两个应用程序实例:一个是由主页访问请求创建的,另一个是由执行排队任务(大约6到7秒后)创建的

我可以尝试通过延迟排队任务的执行来解决这个问题(大约10秒,也许吧?),但是当我启用了并发请求时,为什么我需要尝试这个方法呢?第一个GAE/J应用程序实例是否应该在不产生第二个实例的情况下,不能同时处理两个请求?我想我做错了什么,但那是什么

我搜索了Stack Overflow的一组标记([google app engine][java]),以及正在贬值的组“google app engine for java”,但没有找到与我的问题相关的内容


如果您希望任务使用现有实例,可以设置
X-AppEngine-FailFast
标题,根据GAE文档:

此标头指示调度程序在现有实例不可用时立即使请求失败。任务队列将重试并退出,直到现有实例可用于服务请求


关于性能和调整技术,值得查看文档。

在应用程序仪表板的应用程序设置页面上,您的最小等待延迟设置是什么?较旧的实例的延迟约为2.5秒。这将是启动实例并向用户展示第一页的时候。较新的实例的延迟约为0.5秒。第一次之后的所有请求似乎都由这个较新的实例处理。Simon,感谢您的回答,包括文档参考和标题提示。我已将标题添加到我的初始化任务中。如果这不起作用,我将尝试使用TaskOptions.countdownMillis(…)。根据最新的GAE文档,X-AppEngine-FailFast头现在“指定在后端运行的任务立即失败,而不是等待在挂起的队列中。”我不使用后端,因此这对我没有帮助。在生产中使用此标头可以确认这一点:第一个应用程序实例排队的任务通常由新的第二个应用程序实例处理。