【问题标题】:Intermittent error while downloading blobs in Azure在 Azure 中下载 blob 时出现间歇性错误
【发布时间】:2012-03-30 22:05:50
【问题描述】:

在我在 Azure 上运行的 Web 应用程序中,当网站负载过重时,我似乎在 Windows 事件日志中大约每 10 分钟出现一次这些错误

The server encountered an unknown failure: The operation has timed out
Stack Trace:
at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result()
at Microsoft.WindowsAzure.StorageClient.RequestWithRetry.RequestWithRetrySyncImpl[TResult](ShouldRetry retryOracle, SynchronousTask`1 syncTask)
at Microsoft.WindowsAzure.StorageClient.CloudBlob.DownloadByteArray(BlobRequestOptions options)

但并非一直如此,只是偶尔,我真的不知道如何诊断它,甚至不知道为什么会发生这种情况。

我可以为您提供一些示例代码吗?你需要看什么?不幸的是,这个应用程序处于保密协议之下,所以我不能谈论细节或放弃太多。

我也在 MS 论坛上交叉发布了这个,我将分享我在任何网站上得到的所有答案。目前这是一个真正的生产问题,非常感谢这里的任何帮助。

【问题讨论】:

    标签: c# azure azure-storage azure-blob-storage


    【解决方案1】:

    您提到这些错误是在负载过重时发生的。有几个因素可能会导致 Storage 出现间歇性错误:

    • 网络带宽。你得到大约。每个核心 100Mbps。您能否使计算和存储之间的网络带宽饱和?我猜您有多个角色实例,这会降低遇到此特定问题的可能性。
    • 每个项目的吞吐量和事务率。每个 blob 有效地存储在自己的分区中,目标为 60MB/s。您是否有多个相同对象的阅读器?如果是这样,您可能会因为请求同一对象的读取器过多而导致超时,无论是吞吐量还是事务计数(每个对象的目标是 500 个事务/秒)。
    • 每个帐户的交易率。存储帐户的总体规模目标是每秒 5,000 个事务。同时访问足够多的 Blob,您可能会超过此限制。

    有关可扩展性目标的更多详细信息here

    【讨论】:

    • 你到底是怎么测量这个的?从我所见,真的没有办法跟踪你每个实例使用了多少? API 非常有限。
    • Storage Analytics 将为您提供有关每个 blob 访问、确切时间戳、uri 等的详细信息。它还将提供每小时汇总。请参阅 this msdn article 了解如何启用和访问存储分析。
    • 此外,您可以使用性能计数器测量网络利用率。也许像Nic Utilization = ((Total Bytes\Sec * 8)/current bandwidth) * 100 这样的简单计算可以获得每个实例使用的网络百分比。性能计数器存储在一个表中,代表所有实例,其中一个字段中包含实例 ID。然后,您可以查询以发现利用率百分比。
    • 也许,但通常有交易/传输限制,你会得到运行时异常,不是吗?
    • 我不知道您的问题的根本原因。我只是在向您指出缩小范围(或消除嫌疑人)的方法。确实存在与存储相关的例外情况,但由于您收到超时,我认为至少了解您是否达到某个阈值可能会有所帮助。
    猜你喜欢
    • 2017-09-18
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    相关资源
    最近更新 更多