设为首页 收藏本站
查看: 2219|回复: 0

[经验分享] IIS的MaxConnection的验证

[复制链接]

尚未签到

发表于 2015-8-12 11:14:03 | 显示全部楼层 |阅读模式
  最近公司有位仁兄写了一个监控IIS的软件,里面提到一个连接数, 此连接数主要是收集WMI信息,
  
  把代码写一下:
  
  // 取到IIS的各个站点   
  System.Management.ManagementClass mc = new System.Management.ManagementClass("Win32_PerfFormattedData_W3SVC_WebService");
  
  // 每个站点
  foreach (System.Management.ManagementObject obj in mc.GetInstances())
  {
  // 这里就是每个站点当前的连接数  
  Convert.ToInt64(obj.Properties["CurrentConnections"].Value);    //
  }
  
  乍一看, 此 CurrentConnections是做什么用的呢? 由于我一直想了解一个IIS站点默认在同一时刻究竟能接受多少连接请求,  上网查了查,查到了maxconnection。
  
  首先看看微软是怎么解释的:
  

The maxconnection parameter determines how many connections can be made to a specific IP address.  这个 maxconnection参数用来确定: 对于每个IP能容纳多少个连接数(翻译的并不一定准)。   
  <connectionManagement>   
  <add address="*" maxconnection="2">   // 这里就说明是2个
    </connectionManagement>   
  

  这个 maxconnection会不会是并发连接数呢?   
  
  我们来看看 http://www.microsofttranslator.com/BV.aspx?ref=CSSKB&from=en&to=zh-chs&a=http://support.microsoft.com/kb/821268/en-us?fr=1
  
  里面有一段写的很明白,  
  


  • maxWorkerThreads 参数和 maxIoThreads 参数的值设置为 100
  • maxconnection 参数的值设置 12 * N (其中,N 是您的 cpu 的数量)。
  • 设置要 minFreeThreads 参数的值 88 * NminLocalRequestFreeThreads 参数,76 * N
  • minWorkerThreads 的值设置为 50。请记住 minWorkerThreads 不是默认的配置文件中。您必须添加它。
这些建议的一些涉及一个简单的公式,涉及在服务器上的 cpu 数量。N 表示公式中的 cpu 数量的变量。这些的设置如果您有超线程启用,您必须使用逻辑 cpu 数而不是物理 cpu 数。例如如果启用超线程与四个处理器的服务器然后 N 公式中的值将是 8,而不是 4。  请注意在使用此配置时您可以执行的每个 CPU 12 ASP.NET 请求最多在同一时间因为 100-88 = 12。因此,至少 88 * N 工作线程和 88 * N 完成端口线程都可用的其它用途 (例如 Web 服务回调)。
  
  基本上就明白了。  maxconnection = 12*CPU数量。   我们公司的服务器是使用双核的, 也就是说,在默认的情况下,
  
  我们公司服务器上的IIS站点的默认最大连接数是24,  
  
  接下来验证一下, 测试的目的是为了证明: 当超过24个访问连接候,IIS的站点还能不能接受其他的连接,   
  
  实现准备:
  1 写一个WEBService,里面包括A和B方法,其中A方法里面就一句Thread.Sleep(十分钟), 而B方法则直接Return "OK";  
  2  VS2008负载测试(模拟24个用户同时访问一台服务器上的webServiceA方法,因为A方法是会让线程休眠十分钟)   
  3  同时在服务器上收集WMI信息来观测WEBService当前的连接数, 使用: obj.Properties["CurrentConnections"].Value (具体收集方法看本文开头)
  
DSC0000.jpg
DSC0001.jpg    这是负载测试,
  
  这是负载测试调用的测试方法。
  
  OK, 准备就绪, 开吃。。哦,不对, 开始测试,这里我就不贴出来当时测试的图,  我把我测试的结果告之一下,
  
  当负载测试开始,  Webservicer  的 obj.Properties["CurrentConnections"].Value 值,一直在增加, 当增加到24时,也就是我们模拟的24个用户,
  
  我们在本机再模拟编写一段访问WebServiceB方法的代码,注意B方法是不会使线程休眠的,直接Return "ok" . 结果一直等到超时,也没有OK显示,
  
  但此时 obj.Properties["CurrentConnections"].Value的值为25,
  
  如果我们把负载并发数的设为23呢,再启动负载测试, 当连接数达到23时, 再调用B方法,结果发现,大约在三秒钟,调用B方法成功了,显示&#8220;OK&#8221;,
  
  
  顺便提一句:在ASP.NET 2.0中,引入了autoConfig属性:




1processModel =/>
  当值为true时,autoConfig在运行时修改配置如下:
  


  • 设置maxWorkerThreaders和maxIoThreads为100
  • 设置maxconnection 为12*CPU数量
  • 设置minFreeThreads为88*CPU数量
  • 设置minWorkerThreads为50
  
  
  
  
  
  如果大家说, 我有一台猛机, 配置牛B, 这些默认的设置不够,我需要自已动用配置, OK, 可以直接在machine.config里修改,
  
  下面是示例代码,

<system.net>
   <connectionManagement>
      <add address = "*" maxconnection = "24" />
    </connectionManagement>
</system.net>
  <system.web>
    <httpRuntime minFreeThreads="176"  minLocalRequestFreeThreads="152"/>
    <processModel autoConfig="false" maxWorkerThreads="100" maxIoThreads="100"/>
  
  有些人会问: 这个东东一定要在 machine.config里修改吗? 能不能在web.config里面呢,目前我在Webserive程序里面的Web.config
  修改了   <add address = "*" maxconnection = "30" />, 但使用负载测试时,发现还是不行,只能达到24, 这就说明30并未起作用。
  有知道的说明一下,为什么不行? 按照微软的说明,应该在web.config里面是可以起作用的,
  
  需要注意的是: 如果增加了maxconnection 数量, maxWorkerThreads的数量也需要增加相当的数量, 比如在双核的CPU上, 修改maxconnection = 25,
  
  则 maxWorkerThreads也需要修改为101, 因为 maxconnection = maxWorkerThreads --minFreeThreads  
  
  
  
  
  还有一个疑问: 如果IIS崩溃了, 这里正好有一个HTTP请求过来,那么IIS会怎么处理?  答案中最好有微软的官方说明。  
  
  
  
  
  结论: IIS的站点默认的并发连接数是12*CPU,也就是说默认设置下IIS在同一时刻能处理的最大请求数是12*CPU数量 。
  
  欢迎猛烈拍砖,有什么好建议你老就使劲的提吧。谢谢你了。  
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-97867-1-1.html 上篇帖子: [原创]x.509证书在WCF中的应用(Web/IIS篇) 下篇帖子: 用Socket来简单实现IIS服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表