由于 Azure 存储超时,Long 运行 webjob 失败

Long running webjob fail due to Azure Storage timeout

问题是每天安排的长时间 运行ning azure webjob。每个 运行 需要 2-4 小时进行数据分析。唯一的依赖项是通过 EF 与 Azure SQL 数据库和 Azure 存储,只需在 App.Config 上设置 AzureWebJobsDashboard 和 AzureWebJobsStorage 连接,在 VS 上使用 webjob SDK 进行标准设置。 webjob 的大部分时间都花在了 EF 的 SaveChanges() 上。 我还使用大约 3000 行控制台输出进行大量日志记录以监控进度。 Web 应用程序配置为 Allways ON 并且 WEBJOBS_IDLE_TIMEOUT 设置为非常高的数字。

错误日志如下:

[10/20/2016 07:48:17 > 492c46: ERR ] 未处理的异常: Microsoft.WindowsAzure.Storage.StorageException: 客户端无法在指定的超时时间内完成操作。 ---> System.TimeoutException: 客户端无法在指定的超时时间内完成操作。

[10/20/2016 07:48:17 > 492c46: ERR ] --- 内部异常堆栈跟踪结束 ---

[10/20/2016 07:48:17 > 492c46: ERR ] 在 Microsoft.WindowsAzure.Storage.Core.Util.StorageAsyncResult`1.End()

[10/20/2016 07:48:17 > 492c46: ERR ] 在 Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.EndUploadText(IAsyncResult asyncResult)

[10/20/2016 07:48:17 > 492c46: ERR ] 在 Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions.<>c__DisplayClass4.b__3(IAsyncResult ar)

触发的网络作业如果空闲、没有 cpu 时间或在一定时间内没有输出,就会中止。尝试通过将配置 WEBJOBS_IDLE_TIMEOUT 设置为较大的数字来增加它,例如 3600。

如果您的实例没有配置 Always on,它也可能被中止。

如果这没有帮助,您应该尝试处理日志记录量。可能是您尝试快速写入许多消息吗?看看 看看是否是这种情况。

这是几个月前的事了,但是对于那些以后来的人...

你提到你做了很多日志记录。在处理 something similar 时记录了一个问题。显然,WebJobs SDK 会定期将日志数据保存到 blob 存储中。如果您使用大量带宽或以其他方式消耗大量资源,您可能 运行 尝试保存到 blob 存储的 SDK 超时。请注意堆栈跟踪中的上传调用。

我在一个非常好的惩罚线路的过程中偶尔看到这种情况,所以我通过 WebJobs 日志记录工具禁用日志记录。