任务爆发期间App Engine中止请求错误

时间:2018-06-28 15:08:19

标签: java performance google-app-engine

我对在处理大量任务时在App Engine上收到任务失败消息有疑问。

错误如下:

  

在等待太长时间以尝试服务您的请求后,请求被中止。

我的服务配置如下:

OutputCache

在我的代码中,我想运行并发操作,因此我启动了许多要并发运行的任务。问题是,由于可能没有太多实例准备处理我的呼叫,并且当请求超出最大可保留在队列中的时间时,我可能会不时出现所显示的错误。

您对如何处理这种情况有任何建议吗?将min-pending-latency设置为高值可以在此问题上产生积极影响吗?

谢谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

Japa应用程序的实例启动时间通常较长,这可能在您的方案中起很大作用。

注意事项:

  • 检查您的队列配置,确保它不是导致任务处理瓶颈的一个
  • 启用多线程(在配置中使用<threadsafe>true</threadsafe>),如果您的应用程序可以容忍(并非总是如此)。或者,如果仅使该特定任务处理程序具有线程安全性,则可以将其放在单独的服务中并使其成为多线程。这将允许一个实例同时处理多个任务,从而减少了所需实例的数量,从而降低了实例启动时间的影响
  • 启用/增加备用/驻留/空闲实例的数量(使用min-idle-instances扩展配置元素)-这些实例旨在处理临时请求高峰,直到GAE启动新的动态实例以处理流量增加(这需要一些时间,包括实例启动时间),另请参见Why do more requests go to new (dynamic) instances than to resident instance?
  • 使用TaskOptions.countdownMillis(long) / TaskOptions.etaMillis(long)Using the DeferredTasks instead of a worker service及时错开任务以避免太突然的任务高峰,从而减少了这些任务在队列中花费的有效时间,让GAE有机会启动足够的实例来处理它们