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