这篇文章其实已经写好很久,只是后来一直没有重现当时的问题,或者因为业务的重要性、投诉的压力也就临时处理了。这几天某地市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,否则操作系统会变 得非常不稳定。
打开自己系统的任务管理器,在"性能"项中,可以看到:
如上图所示,这就是我本机当前时刻所使用的分页和未分页内存数,这个数字很正常。
我们再来看下最近这台有问题的机器连续2天,2次出现故障时的内存使用数,未分页内存已经不知不觉暴涨到230多M了
好了,废话不多说,这个时候就需要用到Poolmon这个核心内存泄漏检测工具了。通过这个工具,我们来看看Web服务器上到底是哪些软件或者程序造成内 存泄露,从而导致未分页内存数不足的。Poolmon是类似于Dos 的命令行执行程序,基本上完成检测的操作我们只需要2个指令: P-排序标签列表通过分页,非分页,混合等3种模式;B-对标签排序最大字节使用情况。如下图所示:显示的就是操作系统中所有占用非分页内存项,并按字节 大小降序排列。我们找出排在前面,并且字节数不断增加的tag项,根据Tag来定位进程和驱动文件。比如我们想看下目前占用90M非分页内存的Thre 项,在Dos中输入:
findstr /s /m /l "Thre" c:\windows\system32\drivers\*.sys
如上图所示,我们看到是系统驱动和杀毒驱动占用了Thre。这台机器上次中过毒,所以后来下了瑞星和360卫士来排毒。瑞星是出了名的耗未分页内存大 户,360卫士本身也已经被病毒感染,所以我基本锁定了这2款软件,先卸载,然后重启服务器,重新下载360卫士和360杀毒再次排毒之后观察服务器运行 情况和内存消耗情况。从上次重启到目前为止,运行十多天,未分页内存总消耗保持在50M以内,虽有小许增长,但还算正常。到此,根据上面的分析, 我们就可以定位出导致IIS故障的真正问题所在了。这种问题,很大部分是因为杀毒软件程序或者一些系统驱动导致的。
这里说的很大部分原因是因为杀毒软件程序或者一些系统驱动导致的非分页内存不足,是因为非分页内存一般是内核程序或驱动程序在请求。这种资源非常宝贵,如 果程序处理不当的话,也会导致上述情况,比如一个Socket只接受连接,但因为某些原因没有读取数据,然后客户端连接上之后一直发送数据,在这种极端的 情况下未分页内存也很快就会被占满。
相关推荐
IIS故障问题分析及处理: 针对IIS服务器出现的“Connections_Refused”错误问题,我们首先要了解IIS服务器的基本工作原理及其故障排查方法。IIS(Internet Information Services)是Windows系统中用于承载Web服务的...
IIS故障问题(Connections-Refused)分析及处理.doc
通过查找IIS的日志文件“Httperr.log”信息,显示“Connections_Refused” 二、解决方案 在网上搜索了相关资料,默认情况下,如果可用的非分页缓冲池内存不足 20MB,IIS 6.0 中的 HTTP 服务停止接受连接,所以有以下...
百度搜索了下“_Connections_Refused”,找到微软的官方解决方案,http://support.microsoft.com/kb/934878/zh-cn解决方法如下: 1.进入注册表,进入具体项:HKEY_LOCAL_MACHINE\SYSTEM\Curren
Windows 2003 IIS 服务器 访问出现网页无法显示,网页标题栏提示找不到... 果然,http错误日志中发现很多Number_Connections_refused (拒绝连接)错误, 解决方法: 1、开始运行 regedit 打开注册表,先备份注册表
最近网站经常间歇性罢工,怎么重启IIS都无法使用,一定要把服务器重新启动才可正常;可是重启服务器会影响用户的...查看Web日志,发现一直是Connections_Refused,尝试了多种方法,最终找到了以下解决方案,真是开心
西门子modbus TCP通讯客户端MB-client库文件
SAE-J1742-2005_Connections_for_High_Voltage_On-Board_Road_Vehicle_Electrical_Wiring_Harnesses
标题 "setup_tear_down_avg.m.rar_Connections_Set_up_time" 提供的是一个关于连接建立时间的MATLAB代码资源。描述中提到,这个代码是用于计算或分析连接设置时间的。在IT领域,尤其是在网络通信、系统性能分析或者...
标题 "3_accounting_vb6_Connections_" 暗示我们正在探讨一个使用VB6(Visual Basic 6)开发的会计或发票处理程序,该程序涉及到数据库连接。在这个项目中,开发者利用VB6的编程能力,创建了一个能够与数据库进行...
标题中的"DA3TestClientFW2_zip_Connections_"暗示了一个关于 OPC 连接的软件开发框架,可能是用于VB(Visual Basic)环境中的网络API类库。这个框架可能用于建立OPC(OLE for Process Control)连接,OPC是一种工业...
标题中的“UML.rar_Connections_changingvk4_弱点检测代码”表明这是一个关于UML(统一建模语言)的压缩包,重点讨论了"Connections changingvk4",这可能是指在UML图中关于对象之间连接的变化,以及与之相关的安全...
"NETWORK-MANAGER_nmcli_wifi_Connections_"这个主题聚焦于使用命令行工具`nmcli`来配置WiFi连接。`nmcli`(Network Manager Command Line Interface)是GNOME Network Manager的一个强大的命令行接口,它允许用户在...