我们使用Azure Blob Storage作为大型文件的存储空间(~5-20Gb) 我们的客户报告了问题。下载此类文件有时会停止并永远不会结束。 我已经记录了下载统计信息,并尝试多次下载问题文件。其中一次尝试未成功,现在我有一个图表downloaded_size / time:
从16:00到16:12有短暂停顿。暂停之间的间隔相同,但长度增加。在16:12速度变为Kb / s并且从未恢复到正常值。
以下是继续下载的代码(.NET 4.0):
CloudBlobContainer container = new CloudBlobContainer(new Uri(containerSAS));
CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
var options = new BlobRequestOptions()
{
ServerTimeout = new TimeSpan(10, 0, 0, 0),
RetryPolicy = new LinearRetry(TimeSpan.FromMinutes(2), 100),
};
blockBlob.DownloadToStream(outputStream, null, options);
这种问题可能是什么原因?
编辑要获取统计信息,我使用了以下Stream实现:
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();
}
}
答案 0 :(得分:2)
看起来您在下载大型blob时遇到问题。我已经提供了一些步骤来帮助您调试这些问题。
快速评论:您无需为此下载指定线性重试策略。默认的指数重试策略应该足以满足您的方案。通过将此重试策略允许的失败次数设置为100,可能会延长重试无法修复的问题。你有没有理由选择使用线性重试?
调试Azure存储问题
如果您获得有关此问题的更多详细信息,我们将能够帮助您解决问题。