IIS表现问题试图实施一个。-喜欢协议
-
02-07-2019 - |
题
我们有一位客户需要得到交互式信息服务器,从客户,分布在世界所有类型的防火墙与所有种类的港口关闭。我们唯一可以依靠的是HTTP口80(和HTTPS443).
设计基本上是仿效。(Jabber议定书》),使用我们的客户和IIS。客户的问题得到请求的一个。净处理程序;处理程序拥有的请求开放,同时寻找消息。如果任何消息抵达,他们会立即发送给客户;如果不是,后一个超时关闭连接与"无数据"的反应。客户立即重新开放的通信。
好吧,理论上。
什么是实际发生的情况是,第一,IIS不能处理多于约100同时要求其他人全都排队,并且可以有几分钟的滞之间的"连接"和IIS认识到客户。第二,大约有一半时间的客户时,没有任何响应从服务器(客户超时了五分钟长于服务器的)。
后总是有效。其他数据服务在相同的网络服务器的工作。网络服务相同的服务器上工作。这是一个出的盒子上安装Windows2K3服务器。
是否有一个配置的选择,我们在失踪,或者是还有别的东西我应该看到这个地址?
谢谢。
解决方案
我认为你正在达到ASP.NET线程池限制,而不是IIS线程池限制。考虑创建一个异步HTTP处理程序( IHttpAsyncHandler
),就像它们阻塞/等待它们没有占用线程池一样(它们使用完成端口)。
更新:最近碰到这个似乎与我的想法一致: CodeProject:可扩展的COMET与ASP.NET结合使用
其他提示
如果IIS不符合您的要求,您应该选择其他网络服务器,例如 Apache (与 Mod_mono )或 LightTPD 。
顺便说一下,您可以使用 XMPP Over BOSH 通过HTTP隧道传输XMPP。无需发明自定义协议。
开箱,windows需要一些tweeking.我必须要实现一颗彗星服务器asp.net 并遇到了一些愚蠢的默认。在阅读这些链接:
- IIS7.0 503错误的通用处理程序(.ashx)执行IHttpAsyncHandler
- http://blogs.technet.com/b/winserverperformance/archive/2008/07/25/tuning-windows-server-2008-for-php.aspx
- http://smallvoid.com/article/winnt-tcpip-max-limit.html
- http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/rprf_plugin.html
- http://support.microsoft.com/kb/820129
- http://msdn.microsoft.com/en-us/library/ee37705(BTS。10条)。aspx
- http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx
我想出了以下改变了我们的窗户2k8服务器。
- reg加HKLM系统\CurrentControlSet\服务\HTTP\参数/v MaxConnections/t数/d1000000/f
- reg加HKLM系统\CurrentControlSet子参数/v TcpTimedWaitDelay/t数/d30/f
- reg加HKLM软件\微软\ASP。净\2.0.50727.0/v MaxConcurrentThreadsPerCPU/t数/d0/f
- reg加HKLM软件\微软\ASP。净\2.0.50727.0/v MaxConcurrentRequestsPerCPU/t数/d30000/f
- appcmd.exe 设置应用程序池"[池的应用程序名称]"/queueLength:65535
- appcmd.exe 设置config/部分:serverRuntime/appConcurrentRequestLimit:100000
- reg加HKLM系统\CurrentControlSet子参数/v MaxUserPort/t数/d65534/f
- reg加HKLM系统\CurrentControlSet子参数/v MaxFreeTcbs/t数/d2000/f
- reg加HKLM系统\CurrentControlSet子参数/v MaxHashTableSize/t数/d2048/f reg加HKLM系统\CurrentControlSet\服务\InetInfo\参数/v MaxPoolThreads/t数/d80/f
- appcmd组config/部分:processModel/requestQueueLimit:100000/commit:机
我不知道如果所有的改变是必需的或最佳,但也有一些快速测试对一个测试服务器,我们那去手动打过30万执行的连接和5k要求每秒。不能去因为我跑出来的客户机器的运行测试。
XMPP从未设计用于高性能应用程序。消息必须遍历整个堆栈到应用程序层,并且有很多XML解析。您是否考虑过使用除XMPP之外的其他标准?