Vok*_*Vok 5 c# sockets tcp azure azure-storage
我正在运行WindowsAzure.Storage库的最新版本6.1.1。这以前是一个已知问题,但应该已经在.NET 4.5.1中修复。这正是我遇到的问题。
我在Azure存储中命中了一个要插入100m +行的表。我一直专注于使代码快速且可扩展,它使运行Datacenter 2012 R2的Azure D12 VM达到最大化。我看到每秒处理5,000-10,000个实体(读取文件,处理,上传)。
更新:仅在Azure VM上发生。在我的家庭系统上不会发生。
该过程总是以大约16,384批(大约320,000条记录)崩溃,并出现经典的端口耗尽错误:通常,每个套接字地址(协议/网络地址/端口)仅允许使用一种。
我已经做了平常的事情:增加MaxUserPort(64434)和减少TcpTimedWaitDelay(15秒)。鉴于MaxUserPort失败时具有令人怀疑的逻辑16,384,它似乎被忽略了。
Netstat显示,端口从来没有被关闭过。它们的状态始终保持为“已建立”,直到进程本身关闭,然后它们消失为止。
实际的连接代码归结为:
var acx = CloudStorageAccount.Parse(conn);
var client = acx.CreateCloudTableClient();
var table = client.GetTableReference("Test");
var op = new TableBatchOperation();
foreach (var record in batch) //Batch is just a bunch of entity objects
op.InsertOrReplace(record);
try
{
await table.ExecuteBatchAsync(op, opsConfig, null);
Interlocked.Add(ref totalUploaded, batch.Count);
}
catch...
Run Code Online (Sandbox Code Playgroud)
我已经尝试过所有可以想到的变体-重复使用TableBatchOperations池,使用单个表/客户端/帐户为每次匹配以及两者之间的每种组合创建对象。
这个问题似乎是我无法达到的。据推测,两年前解决此问题时,由于未正确读取响应流,因此连接保持打开状态。
感谢任何建议!请问您是否需要更多信息或说明。
| 归档时间: |
|
| 查看次数: |
565 次 |
| 最近记录: |