IIS并发连接数及性能优化
如果要查看IIS连接数,最简单方便的方法是通过“网站统计”来查看,“网站统计”的当前在线人数可以认为是当前IIS连接数。然而,“网站统计”的当前在线人数统计时间较长,一般为10分钟或15分钟,再加上统计技术及统计机制的问题,从而会产生或多或少的统计误差。
如果要想知道确切的当前网站IIS连接数的话,最有效的方法是通过windows自带的系统监视器来查看。这正是本文要介绍的方法。
一、 新建IIS并发连接数监控器
1. 运行-->输入“perfmon.msc”
2. 在“系统监视器”图表区域里点击右键,然后点“添加计数器”
图一
3. 在“添加计数器”窗口,“性能对象”选择Web Service,“从列表选择计数器”选中Current Connection,“从列表选择实例”选中你要统计的站点,最后点击“添加”按钮
图二
二、 设置完毕
这样,你就可以在“系统监视器”图表区域中看到一条曲线(此曲线你可以设置其颜色和宽度等参数),它就是网站的IIS连接数曲线图了,如图一黄色曲线所示。
需要说明的是,windows系统监视器显示的是即时IIS并发连接数,并非如“网站统计”那里的15分钟内访问人数,所以你会发现IIS并发连接数并不会太多
解决方法:
超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
这是个老问题了!你就查两点:
一、看所有open的连接是否都close了。
二、如果访问量很大,加上Max Pool Size=512这一句,当然这是要以损失系统性能为代价的!
这样以后一定可以解决你的问题!
解决方案一
我 想原因可能是并发操作。DataReader是独占连接的,就是说你的程序可能设计上有问题。比如说最大连接设100,假设有100个人同时使用 DataReader正在读取数据库内容,那么当第101人读取的时候,连接池中的连接已经没有了,就会出现上面的错误。DataReader是独占连接 的,每个DataReader都要占用一个连接。当然这个情况是偶尔出现的,所以会很长时间出现一次,因为只有同时有超过连接池最大连接数量的并发操作才 会发生。而且你加大并发数量只能暂时缓解问题,如果你加大到200个并发连接,如果有201 人同时操作怎么办?你说了你使用Connection对象的Close()方法,这是不行的,因为Clos