已冻结从Azure blob存储下载大型blob

已冻结从Azure blob存储下载大型blob,azure,azure-storage-blobs,Azure,Azure Storage Blobs,我们使用Azure Blob存储作为大文件(约5-20Gb)的存储 我们的客户报告了这个问题。下载此类文件有时会停止,而且永远不会结束。 我已经记录了下载统计信息,并多次尝试下载问题文件。其中一次尝试失败,现在我下载了一张图表\u大小/时间: 从16:00到16:12下载时有短暂的暂停。暂停之间的间隔相同,但长度增加。在16:12时,速度变为Kb/s,并且从未恢复到正常值 以下是继续下载(.NET 4.0)的代码: 这些问题的原因是什么 编辑为了获得统计信息,我使用了以下流实现: public

我们使用Azure Blob存储作为大文件(约5-20Gb)的存储 我们的客户报告了这个问题。下载此类文件有时会停止,而且永远不会结束。 我已经记录了下载统计信息,并多次尝试下载问题文件。其中一次尝试失败,现在我下载了一张图表\u大小/时间:

从16:00到16:12下载时有短暂的暂停。暂停之间的间隔相同,但长度增加。在16:12时,速度变为Kb/s,并且从未恢复到正常值

以下是继续下载(.NET 4.0)的代码:

这些问题的原因是什么

编辑为了获得统计信息,我使用了以下流实现:

public class TestControlledFileStream : Stream
{
    private StreamWriter _Writer;
    private long _Size;

    public TestControlledFileStream(string filename)
    {
        this._Writer = new StreamWriter(filename);
    }

    public override void Write(byte[] buffer, int offset, int count)
    {
        _Size += count;
        _Writer.WriteLine("{0}: ({1}, {2})", DateTime.UtcNow, _Size, count);
    }
    protected override void Dispose(bool disposing)
    {
        if (this._Writer != null)
            this._Writer.Dispose();
    }
}

看起来您在下载一个大blob时遇到问题。我在下面提供了一些步骤来帮助您调试此类问题

快速评论:您不需要为此下载指定线性重试策略。默认的指数重试策略应足以满足您的场景。通过将此重试策略允许的失败次数设置为100,您可能会延长重试无法解决的问题。您选择使用线性重试有什么原因吗

调试Azure存储问题

  • 存储分析日志是调试中有用的第一步,因为它们
    为您提供有关请求的信息,如服务器延迟或
    响应状态代码。您可以查看可用的信息 并学习如何使用日志记录
  • 提供特定于客户端的信息,可帮助您缩小范围 你的问题
  • 在客户端上使用可以提供下载状态的可见性,例如客户端是否正在重试。请注意,这可能会混淆速度或连接问题,因为流量将通过代理运行流量
如果您获得有关此问题的更多详细信息,我们将能够帮助缓解您的问题

public class TestControlledFileStream : Stream
{
    private StreamWriter _Writer;
    private long _Size;

    public TestControlledFileStream(string filename)
    {
        this._Writer = new StreamWriter(filename);
    }

    public override void Write(byte[] buffer, int offset, int count)
    {
        _Size += count;
        _Writer.WriteLine("{0}: ({1}, {2})", DateTime.UtcNow, _Size, count);
    }
    protected override void Dispose(bool disposing)
    {
        if (this._Writer != null)
            this._Writer.Dispose();
    }
}