您的位置:首页 > 其它

IIS“页面无法显示”的故障及其解决方法

2012-02-08 10:13 375 查看
1、 运行环境

服务器操作系统:Microsoft Windows Server 2003 Enterprise Edition Service Pack 1

服务器IIS:6.0

客户端:IE5.5+

2、故障现象:

客户端无法访问Web服务器,错误信息是"页面无法显示",服务器上检查IIS时未发现停止运行,但就是无法访问(即使是静态页面)。查阅windows 安装目录下的system32\LogFiles\HTTPERR\httperrXXX.log(XXX表示数字)文件,发现多条日志都报 Number_Connections_Refused错误(Number是一个整数如1、2、3等)。重启IIS无法解决问题,都是通过重启电脑解决。

3、网上搜索结果:

经搜索,原因可能是nonpaged pool memory(非分页池内存)不够。搜索到以下文档:

微软的官方文档:http://support.microsoft.com/kb/934878/en

一个诊断具体原因的方法:http://jackyhawk.blog.hexun.com/9608276_d.html ,该方法使用了安装盘内Support.cab里面的Poolmon.exe,可直接将Support.cab里面的Poolmon.exe解压出来执行

Poolmon的使用说明:http://support.microsoft.com/?id=177415

另一个诊断具体原因的方法:http://www.ks-soft.net/cgi-bin/phpBB/viewtopic.php?t=2477

4、Poolmon监测结果

使用Poolmon监测后发现IIS所使用的tag占用的非分页内存并没有达到20MB的限制,而一个名为Ddk的tag则是每天都增长若干MB直至整个 nonpaged pool memory达到上限导致IIS拒绝服务。微软提供的pooltag.txt里对Ddk的说明是:Ddk - <unknown> - Default for driver allocated memory (user's of ntddk.h)。

如下表所示,到IIS拒绝服务的时候,nonpaged pool memory已经达到上限110MB,而Ddk tag也已经达到了74MB的数量(一般服务器刚启动的时候Ddk只占用不到1MB)。

Memory: 3669472K Avail: 2629568K PageFlts: 214 InRam Krnl:10920K P:146036K

Commit:1237096K Limit:5618588K Peak:1907340K Pool N:110360K P:154684K

System pool information

Tag Type Allocs Frees Diff Bytes Per Alloc

Ddk Nonp 2484310 ( 13) 1693491 ( 13) 790819 73677496 ( 0) 93

WFC Nonp 387717051 (1584) 387571218 (21112) 145833 5924760 (-745208) 40

LSwi Nonp 1 ( 0) 0 ( 0) 1 2584576 ( 0) 2584576

MmCm Nonp 40 ( 0) 10 ( 0) 30 1786400 ( 0) 59546

TCPt Nonp 7962320 ( 77) 7962290 ( 77) 30 1456744 ( 0) 48558

5、故障诊断

既然确定了主要是Ddk造成nonpaged pool memory不足,那么下一步就是查找出使用了Ddk的驱动程序。在windows安装目录\system32\drivers目录下使用findstr /s /m /l "Ddk" *.sys可以找出哪些驱动程序里面使用了Ddk。查找到以下结果:

WINDOWS\system32\drivers\CpqCiDrv.sys

WINDOWS\system32\drivers\CPQCISSE.SYS

WINDOWS\system32\drivers\iqvw32.sys

WINDOWS\system32\drivers\storport.sys

WINDOWS\system32\drivers\tmtdi.sys

WINDOWS\system32\drivers\TM_CFW.sys

从这里还是看不出具体属于哪些程序。我的方法是在注册表里搜索这些sys文件的文件名(去除.sys后缀后的名字),查找出前2个sys文件属于HP的一 个工具软件,后2个文件属于趋势防病毒软件,中间2个没有找到,但是在WINDOWS\ServicePackFiles\i386下找到同名文件,因此 可以认为他们是操作系统的驱动程序。

找到了这些源头,那么就可以使用排除法(一个个卸载他们)确定到底是哪一个有问题或者是都有问题了(操作系统的那2个驱动卸载不了)。需要注意的是,卸载 之后需要重启电脑才能发现变化,否则nonpaged pool memory仍然会按原来的速度持续增长。还有一个要注意的是,排除掉故障源并重启电脑后nonpaged pool memory会增长一段时间(我这里是一天多,这个增长我认为是正常的,服务器各项应用都起来了并达到饱和状态的时候,消耗的nonpaged pool memory应该会比刚启动的时候多),然后稳定下来,而Ddk则基本不见增长。下面列出稳定下来的时候的poolmon监测结果:

Memory: 3669472K Avail: 2851396K PageFlts: 469 InRam Krnl: 2556K P:123992K

Commit:1130100K Limit:5618588K Peak:1217596K Pool N:31364K P:125092K

System pool information

Tag Type Allocs Frees Diff Bytes Per Alloc

File Nonp 4900398 ( 221) 4874531 ( 219) 25867 4022408 ( 304) 155

Ntfr Nonp 76508 ( 0) 35611 ( 0) 40897 2618376 ( 0) 64

LSwi Nonp 1 ( 0) 0 ( 0) 1 2584576 ( 0) 2584576

MmCa Nonp 267906 ( 1) 245131 ( 4) 22775 2544880 ( -288) 111

MmCm Nonp 40 ( 0) 10 ( 0) 30 1786400 ( 0) 59546

……

Ddk Nonp 19 ( 0) 15 ( 0) 4 29680 ( 0) 7420
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐