我正在对Azure Web API进行性能测试,该API从客户端接收文件附件,然后将它们上传到Data Lake Store。我的效果测试目前正在 6分钟, 250个用户负载 40个请求/秒。
文件上传成功,直到大约4分钟,而请求低于4000,一旦请求超过4000,文件上传开始失败,错误为端口耗尽。
经过一些研究后我发现有大约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)
有人可以帮忙解决这个端口耗尽问题吗?
答案 0 :(得分:0)
跳出来的东西是文件上传会话的会话超时。一旦你在6分钟内达到4000分,那么基本上你没有可用的端口,直到最早的会话开始超时并且服务器上的瞬态客户端端口连接资源被释放。
在标准HTTP会话环境中,您可以非常灵活地调整会话超时,以恢复Web服务器/基于http的应用程序服务器/ HTTP ESB /等的配置文件中的端口。目标似乎设置为240秒。您是否有可用于在目标服务配置中减少此值的配置选项?
答案 1 :(得分:0)
实际上有办法更新默认超时时间为5分钟:
DataLakeStoreFileSystemClient.HttpClient.Timeout = TimeSpan.FromMinutes(1);
另外,请注意我们最近发布了一个新的Data Lake Store SDK,仅用于文件系统操作,以提高性能。看看吧!
Nuget:https://www.nuget.org/packages/Microsoft.Azure.DataLake.Store/