0

我正在对我的 Azure Web API 进行性能测试,该 API 从客户端接收文件附件,然后将它们上传到 Data Lake Store。我的性能测试当前运行了6 分钟,负载为250 个用户发出40 个请求/秒

文件上传成功直到大约 4 分钟,而请求数低于 4000,一旦请求数超过 4000,文件上传开始失败,并出现Port Exhaustion错误。

经过一番研究,我发现大约有 4K 端口可用于通信,一旦客户端发送 FIN 数据包,这些端口就会进入 TcpTimedWaitDelay,默认为 4 分钟(240 秒)。

我在初步研究后发现的解决方案包括

1- 通过更改注册表最小化端口的 TIME_WAIT。

我的场景:我正在使用 Web API,但我无权访问 VM。

2- 通过更改注册表将端口增加到 65K。

我的场景:我正在使用 Web API,但我无权访问 VM。

3- 处理用于发出请求的 http 客户端。

我的场景:我无法直接访问客户端,因为我使用 Azure .NET SDK 的 DataLakeStoreFileSystemManagementClient 上传文件。

在发出大约 4K+ 请求后,我收到错误消息。对于文件上传,我使用

DataLakeStoreFileSystemManagementClient.FileSystem.Create(_dlAccountName, filePath, filestream, true)

有人可以帮忙解决这个端口耗尽问题吗?

4

2 回答 2

0

实际上有办法更新 5 分钟的默认超时:

DataLakeStoreFileSystemClient.HttpClient.Timeout = TimeSpan.FromMinutes(1);

另外,请注意,我们最近发布了一个新的 Data Lake Store SDK,仅用于文件系统操作,以提高性能。一探究竟!

Nuget:https ://www.nuget.org/packages/Microsoft.Azure.DataLake.Store/

Github:https ://github.com/Azure/azure-data-lake-store-net

于 2018-02-03T21:09:54.043 回答
0

突然想到的是文件上传会话的会话超时。一旦您在 6 分钟内达到 4000 标记,那么在最早的会话开始超时并且服务器上的瞬态客户端端口连接资源被释放之前,您基本上没有可用的端口。

在标准的 HTTP 会话环境中,您将具有极大的灵活性来调整会话超时,以恢复 Web 服务器/基于 http 的应用程序服务器/HTTP ESB/ 等配置文件中的端口。目标上的超时似乎设置为 240 秒。您是否有可用的配置选项来减少目标服务配置中的此值?

于 2018-01-16T14:30:18.333 回答