【问题标题】:Java Google App Engine Task Queue freezes / stallsJava Google App Engine 任务队列冻结/停止
【发布时间】:2014-11-19 22:28:24
【问题描述】:

我一直在使用任务队列来模拟我的应用中的使用情况。有时,任务队列会停顿,队列中的一些任务会卡住。被冻结的任务的 ETA 可能在几分钟前。

以下是注册 50 个用户的示例任务队列的日志。请注意,在执行 11 个任务后,有 2 分钟的暂停,直到最后 39 个任务执行完毕。任何任务都没有错误或重试。

 I 2014-11-19 17:16:08.436 200 0 B 2301ms /registerWorker
 I 2014-11-19 17:16:08.727 200 0 B 2661ms /registerWorker
 I 2014-11-19 17:16:08.728 200 0 B 2800ms /registerWorker
 I 2014-11-19 17:16:08.729 200 0 B 2663ms /registerWorker
 I 2014-11-19 17:16:08.730 200 0 B 2667ms /registerWorker
 I 2014-11-19 17:16:08.731 200 0 B 2662ms /registerWorker
 I 2014-11-19 17:16:08.731 200 0 B 2666ms /registerWorker
 I 2014-11-19 17:16:08.883 200 0 B 2748ms /registerWorker
 I 2014-11-19 17:16:08.940 200 0 B 2875ms /registerWorker
 I 2014-11-19 17:16:08.941 200 0 B 3014ms /registerWorker
 I 2014-11-19 17:16:09.070 200 0 B 630ms /registerWorker
 I 2014-11-19 17:18:09.132 200 0 B 1116ms /registerWorker
 I 2014-11-19 17:18:09.134 200 0 B 1116ms /registerWorker
 I 2014-11-19 17:18:09.224 200 0 B 1208ms /registerWorker
 I 2014-11-19 17:18:09.227 200 0 B 1210ms /registerWorker
 I 2014-11-19 17:18:09.228 200 0 B 1212ms /registerWorker
 I 2014-11-19 17:18:09.229 200 0 B 1213ms /registerWorker
 I 2014-11-19 17:18:09.231 200 0 B 1213ms /registerWorker
 I 2014-11-19 17:18:09.231 200 0 B 1215ms /registerWorker
 I 2014-11-19 17:18:09.232 200 0 B 1215ms /registerWorker
 I 2014-11-19 17:18:09.233 200 0 B 1216ms /registerWorker
 I 2014-11-19 17:18:12.128 200 0 B 952ms /registerWorker
 I 2014-11-19 17:18:12.135 200 0 B 961ms /registerWorker
 I 2014-11-19 17:18:12.232 200 0 B 1053ms /registerWorker
 I 2014-11-19 17:18:12.233 200 0 B 1057ms /registerWorker
 I 2014-11-19 17:18:12.325 200 0 B 1149ms /registerWorker
 I 2014-11-19 17:18:12.326 200 0 B 1151ms /registerWorker
 I 2014-11-19 17:18:12.327 200 0 B 1152ms /registerWorker
 I 2014-11-19 17:18:12.328 200 0 B 1150ms /registerWorker
 I 2014-11-19 17:18:12.328 200 0 B 1151ms /registerWorker
 I 2014-11-19 17:18:12.329 200 0 B 1154ms /registerWorker
 I 2014-11-19 17:18:13.735 200 0 B 1032ms /registerWorker
 I 2014-11-19 17:18:13.736 200 0 B 1034ms /registerWorker
 I 2014-11-19 17:18:13.737 200 0 B 1035ms /registerWorker
 I 2014-11-19 17:18:13.737 200 0 B 1035ms /registerWorker
 I 2014-11-19 17:18:13.827 200 0 B 1124ms /registerWorker
 I 2014-11-19 17:18:13.828 200 0 B 1126ms /registerWorker
 I 2014-11-19 17:18:13.830 200 0 B 1127ms /registerWorker
 I 2014-11-19 17:18:13.831 200 0 B 1128ms /registerWorker
 I 2014-11-19 17:18:13.834 200 0 B 1131ms /registerWorker
 I 2014-11-19 17:18:14.052 200 0 B 1350ms /registerWorker
 I 2014-11-19 17:18:14.331 200 0 B 544ms /registerWorker
 I 2014-11-19 17:18:14.333 200 0 B 544ms /registerWorker
 I 2014-11-19 17:18:14.334 200 0 B 546ms /registerWorker
 I 2014-11-19 17:18:14.925 200 0 B 731ms /registerWorker
 I 2014-11-19 17:18:14.928 200 0 B 733ms /registerWorker
 I 2014-11-19 17:18:14.929 200 0 B 735ms /registerWorker
 I 2014-11-19 17:18:14.930 200 0 B 736ms /registerWorker
 I 2014-11-19 17:18:14.931 200 0 B 736ms /registerWorker
 I 2014-11-19 17:18:14.937 200 0 B 743ms /registerWorker

我在 queue.xml 中定义的这个任务的设置是:

  <queue>
    <name>register-user</name>
    <rate>25/s</rate>
    <bucket-size>100</bucket-size>
    <max-concurrent-requests>10</max-concurrent-requests>
    <retry-parameters>
      <task-retry-limit>3</task-retry-limit>
      <task-age-limit>1m</task-age-limit>
    </retry-parameters>
  </queue>

有时所有任务都按预期执行,有时则不然。这是应用引擎的错误吗?

【问题讨论】:

    标签: java google-app-engine task-queue


    【解决方案1】:

    您的任务需要 1 到 2.5 秒才能执行。您将并发限制设置为 10,将执行速率设置为 25/s。这些设置显然不可能以上述执行时间来实现。

    请注意 App Engine 如何快速接受您的前 10 个任务,稍稍停顿后接受第 11 个任务,然后意识到没有任何任务完成并决定等待。然后它在这个长时间的停顿之后又接受了 10 个任务,再次暂停,又接受了 9 个,暂停,最后接受了最后的 10 个。

    我在这里没有看到任何错误 - 根据您的设置,我看到了相当一致的性能。

    【讨论】:

    • 如果前 10 个任务的完成时间不超过 3 秒,为什么会暂停 2 分钟?我按原样设置了设置,因为有时这些相同的任务需要大约 300 毫秒。
    • 可能是因为 App Engine 意识到它无法满足您的所有要求。尝试使用现实的设置,看看你是否有同样的问题。顺便说一句,您是否限制了实例的数量或更改了执行此任务的实例类型的任何其他设置?您还可以查看此实例的日志以查看是否有任何警告。
    • 我不认为这是设置。我只是用相同的设置再次尝试,所有 50 项任务在不到 6 秒的时间内完成。请注意,我是在 /_ah/warmup 之后不久部署后立即执行此操作的。就像我在原始问题中提到的那样,这个问题是间歇性的
    • 所以您在 App Engine 控制台中绝对看不到这两分钟的日志条目(警告、信息)?实例图表、每分钟请求数图表之类的呢?
    • 没有任何警告/错误。任务队列只是冻结。我可以通过管理控制台逐个手动运行冻结的任务,但有时这甚至不起作用。实例部分将有 1 个常驻实例和 2 个动态实例,其中 2 个动态实例中的 1 个处理绝大多数(约 90%)的请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多