首页 > 网站 > IIS > 正文

IIS故障(Connections_Refused)问题分析及处理

2024-08-29 03:13:21
字体:
来源:转载
供稿:网友

    这篇文章其实已经写好很久,只是后来一直没有重现当时的问题,或者因为业务的重要性、投诉的压力也就临时处理了。这几天某地市Web服务器连续多次出现这个问题,正好借这个案例来做个收尾。

    前几个月有台重要的Web服务器(Windows Server2003 + IIS6.0)出现客户端无法访问Web服务器上的站点,错误信息提示为"页面无法显示"的情况。登录服务器检查后发现IIS并未停止运行,各服务也正常处理,但就是无法访问站点上的页面(包括静态页面)。这种问题其实以前也经常发生,基本上处理方法都是通过重启Web服务器来解决,至于为什么要这样处理,并没有具体的论断和依据,多半是凭借个人的经验所致,所以这种解决方法只能缓解下投诉压力,没有从根本上解决问题。

    那么,我们现在就来针对这个问题深入探讨下,找出问题的根本,争取做到治标治本。

    首先,肯定是分析问题服务器上的IIS日志,我发现在站点无法访问的那段时间, httperr日志中记录了大量的"Connections_Refused"错误

     这个问题是在默认情况下,如果可用的非分页缓冲池内存不足 20MB,Http.sys 服务将停止接收新连接,就会出现上述问题。这也就解释了为什么重启IIS没用,只能通过重启Web服务器释放内存资源来解决。
    网上也有微软官方的解决方案:
  1. 进入注册表,找到如下项:
     HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/HTTP/Parameters ; 
  2. 新建Dword值,输入名称 "EnableAggressiveMemoryUsage";
  3. 修改值为1;
  4. 重启 HTTP 服务:
     在DOS下分别执行   
        net stop http /y
        iisreset /restart

    我按照上述说明进行了配置,但有没有效果无法考证,只能先观察这台服务器后续的运行情况。这种处理方法比之前重启Web服务器更进了一步,至少比之前盲目的重启重启重启,更明确的知道了引起问题的原因,离真相更近了一步。那么问题发生的真正原因呢?究竟是什么导致的非分页缓冲池内存会持续增大到少于20M的呢?
    要分析这个问题,首先得了解下Windows系统中的核心内存概念:核心内存是Windows分配给系统内核或驱动所需的内存空间,分页内存是虚拟内存,也就是这一部分内存可以置换到硬盘中,但是,非分页内存是不能置换到硬盘的,只能保存在物理内存中,常用于一些软件或是系统的驱动程序使用。如果未分页内存无限增大,到达一个阀值,就会造成系统问题。在32位的Windows上,这个阀值最高不能超过256MB,否则操作系统会变得非常不稳定。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表