HttpWebRequest在Non-KeepAlive管道上创建请求

时间:2014-03-13 00:00:29

标签: c# asp.net iis httpwebrequest

我现在已经面临一个独特的问题了。我们的Web服务器全天在恒定负载(大约每秒500个请求)下运行。我们还将外拨称为外部API。

问题: 我看到大约9k-10k TIME_WAIT连接到我的外部API(我在netstat上应用了过滤器) 即使TIME_WAIT在30秒后回收(是的,我们在注册表中进行了更改);在恒定负载下;我们的服务器吞吐量减少,因为我们遇到端口耗尽(我可以增加端口号,但我想先解决问题)

  1. 我们限制与外部API的连接。在相同的RPS下进行多次负载测试后,我们将MaxConnection设置为16。 AutoConfig也设置为false。
  2. 我们希望保持Keep-Alive连接,以便我们可以重用该频道。
  3. 发生了什么: 1.服务器保持健康一段时间,并限制连接。但过了一段时间,由于某种原因,我开始得到指数TIME_WAIT。我注意到当服务器坏了(很多TIME_WAIT);它在Non-KeepAlive管道上创建每个新连接。我这样说是因为每当我们点击netstat时,ESTABLISHED连接都在新端口上。它没有重用频道。 此外,wireshark还显示我的Web服务器显式向外部API发送Connection:Close标头,然后它发送FIN包并进入TIME_WAIT状态。

    到目前为止,我们尝试了什么: 几乎所有MS推荐的东西都不起作用。我们终于开始每分钟创建唯一的ConnectionGroupName。所以在一分钟之后,来自旧组的所有连接都被回收。这确实解决了我们的负载测试环境中的问题。但是,没有导致生产设置。我们完全复制了负载测试环境,就像生产实例数较少的生产一样。

    之前有没有遇到过这样的问题?主要问题是一旦服务器进入无休止的TIME_WAIT状态,它就无法恢复;我们试图从ELB中取出它,它确实回收了连接但是一旦我们把它重新打开,它就会在几秒钟内变坏。

    我们正在使用Windows Server 2008 R2和.net framework 4.5.1

    任何帮助将不胜感激..

0 个答案:

没有答案