【问题标题】:Long running Azure Webjob - Keeps stopping长时间运行的 Azure Webjob - 不断停止
【发布时间】:2016-03-29 03:55:46
【问题描述】:

我已经使用 Azure webjobs 有一段时间了,但我仍在努力弄清楚为什么一些运行时间极长的 web 作业会失败..

我有使用 Azure SDK 构建的 webjob,并从传入的队列消息中触发。此 web 作业从 Azure Blob 存储中提取一个 XML 块,其中包含有关 110000 个项目的信息,然后循环通过这些并使用 REST WebApi2 端点发出各种 HttpClient 请求,以在我们的表存储和 DocumentDB 中创建各种实体......这个过程是我正在处理的事情,但它运行了好几天......这很好,因为没有紧迫性,除了从它开始随机停止,有时两天后......最后一次唯一的消息是“线程被中止”。我定期注销和 http 调用,所以它不像工作是坐在那里无所事事...... 更新:

我还应该声明我已将整个应用服务计划升级到 S1,并将托管 Web 作业的 Web 应用设置为 Always On...

我也看过“WEBJOBS_RESTART_TIME”,但这无关紧要,因为它与停止后重新启动有关,我认为不应该做一个没有错误的连续工作!

【问题讨论】:

    标签: azure azure-webjobs


    【解决方案1】:

    我发现了与长期运行的网络作业有关的一件事。要使线程继续工作很长时间,您必须:

    • 不时使用 Console.Write 写入输出
    • 添加一个名为 WEBJOBS_IDLE_TIMEOUT (source) 的应用设置,它定义了环境在关闭之前等待空闲网络作业(无控制台输出)的时间量。

    我会两者都做,添加控制台。像“心跳”一样写入并添加应用设置。

    【讨论】:

    • 谢谢,但我正在到处写 Trace.TraceInformation,就像每一秒一样,所以我看不到 Azure 认为它是空闲的......但会添加该设置......我倾向于不要在 webjob 中使用 Console.Write,就好像你使用 trace 它直接为你提供 blob 存储!
    • 我明白了,问题是“监视”Webjob 空闲的进程正在检查“输出”,在这种情况下,就是控制台。
    • 天才!!!所以他们提出了一种很好的简单方法来注销消息,然后监控另一个消息!!!一定会喜欢这种联合的想法,但感谢一百万的提醒......会看到它是怎么回事!!!
    • 哈哈哈我只是指点我从经验中学到的东西 :) 先尝试应用程序设置,看看它是否解决了你的超时问题,如果一切都失败了,你总是可以做一个控制台.写心跳:)
    【解决方案2】:

    我们在长期运行的网络作业方面遇到了很多问题,最终购买了付费支持,因为这些作业经常会失败,而我们就是不知道原因。这已经持续了2个多月,仍然没有解决方案。他们确实建议使用 local_cache 设置,该设置在一段时间内停止了重新启动,但最终,重新启动又开始了。

    我们已将它们从多年来一直完美运行的虚拟机中移出。在我看来,网络作业不适合长时间运行的作业,您应该转移到虚拟机。我们有许多短期运行的工作,它们做得很好,但对于任何长期运行的工作,我认为网络工作还没有准备好迎接黄金时间。我们在这些问题上花费了很多时间来提供支持,但坦率地说,我们觉得我们现在只是在浪费时间。省去自己的痛苦,去一个虚拟机,在 6 个月后重新审视这个。

    【讨论】:

    • 如果您的生产系统每天发生多次故障,并且您为无法解决问题的支持付费时,等待会议消息可能不是最佳策略。跨度>
    • 感谢您的 cmets,知道我并不是唯一一个为此苦苦挣扎的人,这总是很有趣,也很奇怪。微软的指导方针是,网络工作应该能够从我们中断的地方继续,我想当你可能在资源等之间徘徊时,这并不奇怪。一旦我将此逻辑添加到我的工作中,那么它重新启动的事实实际上并不重要。我想当你这样看的时候,是的,你的工作可能应该更加防御性地编程以允许这一点。
    • 自从我发布上述内容以来,我学到了一些东西:1)他们实际上并没有在你的 Webapp/Webjob 中移动那么多,所以工作失败很少是这种活动的迹象。这是一位支持技术人员告诉我的。这使我相信“​​从中断的地方继续”策略是微软处理潜在问题的方式 2)如果您不是首要客户,请不要费心购买支持,因为您真的没有太多其他如果您的问题是“我该怎么做”类型的事情。我们已将所有内容移回虚拟机,它坚如磐石,所以我们知道这不是我们的代码.....
    • 我们实际上转移到了 AWS。虽然他们那里没有 Webjobs/应用程序,但支持非常好,他们帮助我们解决了一些小问题。我们从来没有能够让工作停止在 Azure 中失败,支持只会告诉我们“我们正在努力”,但什么也没发生。也许情况有所改善,长期运行的作业很稳定,但我们此时不会考虑回到 Azure。
    猜你喜欢
    • 2022-08-18
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2012-03-15
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多