由于 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 日志记录工具禁用日志记录。
问题是每天安排的长时间 运行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 日志记录工具禁用日志记录。