由于Azure存储超时,长时间运行的webjob失败

时间:2016-10-20 16:56:17

标签: azure-storage-blobs azure-webjobs azure-webjobssdk azure-storage-queues

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

以下是错误的日志:

[10/20/2016 07:48:17> 492c46:错误]未处理的异常: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> Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.EndUploadText(IAsyncResult asyncResult)中的492c46:ERR]

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

2 个答案:

答案 0 :(得分:1)

这已经有几个月了,但对于后来的人来说......

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

我偶尔会看到这个过程非常好,所以我通过WebJobs日志工具禁用日志记录。

答案 1 :(得分:0)

A triggered webjob is aborted if it is idle, has no cpu time or output for a certain amount of time. Try and increase it by setting configuration WEBJOBS_IDLE_TIMEOUT to a large number, for instance 3600.

It could also be aborted if your instances hasn't configured Always on.

If that doesn't help you should try handle the amount of logging. Could it be that you try and write to many messages to fast? Have a look at this answer to see if that coould be the case.