如何调查和测试 IIS 连接池/端口重用

How to investigate and test IIS connection pooling / port reusing

我们正在开发 Azure 服务形式的中间件解决方案,但遇到端口耗尽问题。由于我不知道 Azure 中有任何工具可以在这里为我提供更多见解,因此我想在我的本地 IISExpress 上进行一些测试。 我们的中间件解决方案 (.NET Core Web API) 连接 Azure Cosmos DB 服务和范围广泛的其他 REST API。我们认为我们的代码稳定可靠。将 IHttpClientFactory 用于 Cosmos DB 请求,并将 RestSharp 用于所有其他 API 请求。但是,一定有漏洞。某些子进程正在创建过多的 HttpClient 实例或类似实例,这会导致出现

之类的消息
"An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full"

现在,我正在通过 Postman 模拟请求,同时 运行 一些 netstat 命令。但我无法获得我正在寻找的见解。 Netstat 只是不断列出 IP 和端口号。我什至看不到我正在连接的主机名后面的 IP。 所以我有点迷路了。

有没有办法让 netstat 只显示 IISExpress 使用的端口?或者是否有更好的方法来深入了解端口使用情况?

我现在要做的是 运行 这个命令,同时循环执行网络请求,看看 TIME_WAIT 行数是否在增加。但这是可靠的检查吗?

netstat -ano  | select-string TIME_WAIT | measure-object

您的问题听起来就像您每次打开连接时都在创建一个新的 HttpClient。这是不正确的行为,会导致您所遇到的情况。

作为per the docs,您创建了一个HttpClient 一次,然后重复使用它。在某些情况下,您可能会使用多个 HttpClient(例如,每个 API 您正在调用一个),有时您可能需要 'refresh the dns',但通常,您会创建一个并继续使用它。

https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?redirectedfrom=MSDN&view=net-6.0