【问题标题】:Azure Batch tasks stuck in Running stateAzure Batch 任务卡在运行状态
【发布时间】:2017-12-07 00:05:08
【问题描述】:

我在 Azure Batch 上有几个任务卡在运行状态,尽管节点服务器对此一无所知(没有在那里运行,没有找到文件夹)。 GUI 中的任何任务操作(终止、删除、在节点上显示文件)都以There was an error while terminating task t20171129-0010-03. The server returned '500 Internal Server Error'. 结尾。这在不同的池/作业/任务上发生了多次。

现在我检查了节点本身的调试文件,问题似乎是由于未能延长租约并随后从节点中删除任务,但中止尝试更新任务表没有活动的队列租约

这是我可以避免的,还是只是 Azure Batch 服务中的一个错误?究竟什么是“租约”以及需要多久更新一次? (我的 Azure 订阅不包含技术支持)。

日志中有趣的行:

agent.task.lease■lease.py■_renew_lease_unsafe_async■106■1398■MainThread■139690855581440■extending lease for pd1batch 22F55DC6E98C8653$1a-python 22F4F1C234F19066$job-1$t20171129-0010-06
requests.packages.urllib3.connectionpool■connectionpool.py■_make_request■387■1398■Thread-1■139690661328640■"PUT /pd1batch-a-fa357c64-5c3d-4db8-9366-680943d2c20d/messages/821bf60d-3ba5-43a1-9c3d-c7500758bfea?sv=2015-07-08&se=2017-12-06T00%3A42%3A17Z&sp=up&sig=XXX&visibilitytimeout=360&popreceipt=AwAAAAMAAAAAAAAAFePc%2BR5u0wEBAAAA HTTP/1.1" 404 221
azurestorage.helper.HTTPNotFoundError: 404 Client Error: The specified message does not exist. for url: https://watbl2prod1.queue.core.windows.net/pd1batch-a-fa357c64-5c3d-4db8-9366-680943d2c20d/messages/821bf60d-3ba5-43a1-9c3d-c7500758bfea?sv=2015-07-08&se=2017-12-06T00%3A42%3A17Z&sp=up&sig=mU9501N4HHuDeRWuA7qMNni9M%2Fbb83OWLF8AW0%2B4nQE%3D&visibilitytimeout=360&popreceipt=AwAAAAMAAAAAAAAAFePc%2BR5u0wEBAAAA
agent.task.lease■lease.py■_renew_lease_unsafe_async■119■1398■MainThread■139690855581440■failed to extend lease for pd1batch 22F55DC6E98C8653$1a-python 22F4F1C234F19066$job-1$t20171129-0010-06
agent.task.manager■manager.py■handle_task_lease_extension_error_async■4713■1398■MainThread■139690855581440■deleting task pd1batch 22F55DC6E98C8653$1a-python 22F4F1C234F19066$job-1$t20171129-0010-06$0 because lease was lost
agent.task.manager■manager.py■_postprocess_execute_task_async■2255■1398■MainThread■139690855581440■updating row in task table for: pd1batch 22F55DC6E98C8653$1a-python 22F4F1C234F19066$job-1$t20171129-0010-06$0
agent.task.manager■manager.py■_update_tasktable_entity_async■1624■1398■MainThread■139690855581440■aborting attempt to update task table without an active queue lease for pd1batch 22F55DC6E98C8653$1a-python 22F4F1C234F19066$job-1$t20171129-0010-06$0

整个日志:https://pastebin.com/fkqTRuBe

【问题讨论】:

  • 这些任务运行了多长时间?
  • 我认为最后一个只有几天,但较旧的可能最多 7 天。但这不应该导致他们被卡住......
  • 这就是原因 - 我会在答案中解释。

标签: azure azure-batch


【解决方案1】:

目前,Azure Batch 任务的总生命周期限制为 7 天,从提交到作业的时间开始,如 here 所述。

达到此限制时,系统中会出现阻止任务状态更新传播的问题。但是,如果您观察任务运行的节点状态,它将返回空闲状态(假设没有其他任务被安排到它或当前正在运行)。

您有几个选择可以避免这种情况。如果您的工作负载可以扩展或迁移到性能更高的 VM 类型,以便您的任务在时间限制内完成。如果您可以通过执行分布计算或将问题分块为较小的大小并以令人尴尬的并行方式运行它来扩展您的问题(或进一步扩展它),这可能有助于解决您的问题。

当前的行为对用户不是很友好。有计划在未来增加此限制。

【讨论】:

  • 如果我在创建任务时设置了时间限制(例如 1 天)并允许重新启动任务,这会有所帮助还是这些任务重新启动累积到 7 天并且无论如何都会失败?我的任务本身运行了许多小的“子任务”,所以重新启动它就可以了,它会从它离开的地方继续。
  • 如果您的逻辑知道如何按照您的建议进行检查点/重启,这将有所帮助。您不能只依赖任务重试(因为它使用相同的任务),但是如果您为每次重新启动创建一个新任务,这将起作用。每个任务都是独立的,工作本身没有时间限制。如果适合您的场景,您可以使用最大挂钟时间任务约束自动结束任务。此外,您也许可以使用工作重复来自动化整个事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多