手机版

IIS失败(连接被拒绝)的分析和处理

时间:2021-10-06 来源:互联网 编辑:宝哥软件园 浏览:

其实这篇文章写了很久了,但是当时的问题从那以后就没有再转载过,还是因为业务的重要性和投诉的压力,暂时处理了。这几天某城市的Web服务器连续多次出现这个问题,正好是这个案例的一个收尾点。几个月前,有一个重要的Web服务器(Windows Server2003 IIS6.0),客户端无法访问Web服务器上的站点,错误消息为“无法显示页面”。检查服务器登录后,发现IIS没有停止运行,所有服务处理正常,但是站点上的页面(包括静态页面)无法访问。其实这种问题以前也经常发生。基本上是通过重启Web服务器解决的。至于为什么要这样处理,没有具体的判断和依据,大部分是个人经历造成的。因此,这种解决方案只能缓解投诉压力,并不能从根本上解决问题。那么,现在就让我们深入探讨这个问题,找出问题的根源,力求标本兼治。首先,我一定分析过问题服务器上的IIS日志。我发现在网站不可访问期间,httperr日志中记录了大量的‘Connections _ rejected’错误。

问题是,默认情况下,如果可用的非分页缓冲池内存小于20MB,Http.sys服务将停止接收新的连接,就会出现上述问题。这就解释了为什么重启IIS没有用,只能通过重启Web服务器释放内存资源来解决。互联网上也有微软官方的解决方案:1。进入注册表,找到以下项目:HKEY _本地_机器\系统\当前控制集\服务\ http \参数;2.创建一个新的Dword值,并输入名称“enableCritiveMemorySage”;3.修改后的值为1;4.重启HTTP服务:在DOS下分别执行net stop HTTP/y IIS reset/重启。我已经按照上面的说明进行了配置,但是效果无法验证,所以只能先观察这个服务器的后续操作。这种处理方法比之前重启Web服务器又进了一步,至少它比之前更清楚地知道了问题的原因,也更接近事实。那么问题的真正原因是什么呢?是什么原因导致未分页缓冲池内存持续增加到20M以下?要分析这个问题,首先要了解Windows系统中核心内存的概念:核心内存是Windows分配给系统内核或驱动程序的内存空间,分页内存是虚拟内存,即这部分内存可以替换到硬盘,但非分页内存不能替换到硬盘,只能存储在物理内存中,这是一些软件或系统驱动程序经常使用的内存。如果未分页内存无限增加并达到阈值,将导致系统问题。在32位Windows上,最大阈值不能超过256MB,否则操作系统会变得非常不稳定。打开自己系统的任务管理器。在“性能”项中,可以看到:

如上图所示,这是我的电脑目前使用的分页和非分页内存数量,正常。让我们看看这台故障机器连续两天和两次故障的内存使用情况。未分页内存不知不觉飙升至230多万

好了,二话没说,此时需要核心内存泄漏检测工具Poolmon。有了这个工具,我们可以看到Web服务器上哪些软件或程序导致内存泄漏,从而导致非分页内存不足。MON是一个类似于Dos的命令行可执行程序。基本上我们只需要两条指令就可以完成检测操作:P-通过分页、不分页、混合等三种模式对标签列表进行排序;-b标签排序的最大字节使用量。如下图所示,它显示了操作系统中所有未分页的内存项目,这些项目按字节大小降序排列。我们找出排名靠前且字节数不断增加的tag项,根据Tag定位进程和驱动文件。例如,如果我们要查看目前占用90M非分页内存的THREE项,输入: find str/s/m/l ' thre ' c : \ windows \ system32 \ drivers \ *。多斯的系统

如上图所示,我们可以看到系统驱动和杀毒驱动占用了THREE。这台机器上次中毒了,所以后来瑞星和360守卫来解毒。瑞星是有名的非分页内存的消费者,而360 Guardian本身已经被病毒感染,所以我基本上锁定了这两个软件,先卸载,然后重启服务器,再次下载360 Guardian,再次观察360杀毒解毒后的服务器运行和内存消耗情况。自从上次重启以来,已经运行了十几天,未分页内存总消耗保持在50M以内。虽然小许有所增加,但这仍然是正常的。至此,根据以上分析,我们可以定位到导致IIS失败的真正问题。这种问题大多是由杀毒软件程序或一些系统驱动程序引起的。这里提到的大部分原因都是因为杀毒软件程序或者一些系统驱动造成的非分页内存不足,因为非分页内存一般是内核程序或者驱动请求的。这种资源非常宝贵,如果程序处理不当,也会导致上述情况。例如,Socket只接受连接,但由于某些原因,它不读取数据,然后客户端在连接后继续发送数据。在这种极端情况下,未分页的内存很快就会被占用。

版权声明:IIS失败(连接被拒绝)的分析和处理是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。