您的位置:首页 > 其它

如何解决win2003 sp2,iis6频繁假死的问题?

2013-02-26 11:38 337 查看

如何解决win2003 sp2,iis6频繁假死的问题?

问题描述:

大概每3天就会假死1次

假死的时候在客户机和服务器上,都无法访问页面,html和asp.net都无法访问

假死时iis服务是运行的

重起iis服务也无法解决

只能重起服务器,起了之后就OK,但是3天左右又死了

如何解决假死呢?

如果是补丁,请详细给出补丁的链接

如果是应用池,请详细给出配置信息

问题原因:

听起来很像是NonPagedPool用完了,http.sys就无法接受http请求了,可以检查一下IIS error log: %WIN_ROOT%\system32\LogFiles\HTTPERR\httperr#.log里面有没有下面的错误:

datetime - - - - - - - - - 1_Connections_Refused -

如果有的话,参考以下文章,很有可能你用了3GB,把它改回去就可以了

http://support.microsoft.com/kb/933844

实际上的log信息是:

2009-04-08 13:10:33 - - - - - - - - - 2_Connections_Refused -

2009-04-08 13:10:48 - - - - - - - - - 6_Connections_Refused -

2009-04-08 13:11:28 - - - - - - - - - 5_Connections_Refused -

2009-04-08 13:11:33 - - - - - - - - - 6_Connections_Refused -

2009-04-08 13:11:38 - - - - - - - - - 25_Connections_Refused -

2009-04-08 13:11:43 - - - - - - - - - 96_Connections_Refused -

2009-04-08 13:11:48 - - - - - - - - - 100_Connections_Refused -

2009-04-08 13:11:53 - - - - - - - - - 103_Connections_Refused -

2009-04-08 13:11:58 - - - - - - - - - 38_Connections_Refused -

2009-04-08 13:12:23 10.248.202.65 4021 10.255.43.200 80 - - - - - Timer_ConnectionIdle -

2009-04-08 13:14:23 10.250.162.55 61418 10.255.43.200 80 - - - - - Timer_ConnectionIdle -

2009-04-08 13:14:23 - - - - - - - - - 5_Connections_Refused -

2009-04-08 13:14:28 - - - - - - - - - 2_Connections_Refused -

2009-04-08 13:14:33 - - - - - - - - - 3_Connections_Refused -

2009-04-08 13:14:38 - - - - - - - - - 92_Connections_Refused -

2009-04-08 13:14:43 - - - - - - - - - 90_Connections_Refused -

2009-04-08 13:14:48 - - - - - - - - - 93_Connections_Refused -

2009-04-08 13:14:53 - - - - - - - - - 91_Connections_Refused -

2009-04-08 13:14:58 - - - - - - - - - 96_Connections_Refused -

2009-04-08 13:15:03 - - - - - - - - - 53_Connections_Refused -

2009-04-08 13:15:53 10.248.202.65 1377 10.255.43.200 80 - - - - - Timer_ConnectionIdle -

2009-04-08 13:17:23 - - - - - - - - - 21_Connections_Refused -

2009-04-08 13:17:28 - - - - - - - - - 15_Connections_Refused -

模拟解决问题步骤:

:我在你给的文章(http://support.microsoft.com/kb/933844)中看到需要修改boot.ini

[boot loader]

timeout=2

default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect

C:\mxldr=MaxDOS V6

我没看到3G开关啊

:那么说明你并没有使用3GB,一定有什么程序导致了Kernel Mode Memory leak。

打开任务管理器,在Performance选项卡上注意观察Kernel Memory/Nonpaged的大小,是不是在持续增长。假设你的物理内存有4G,那么在Windows 2003下面,默认的NonPagedPool的总大小约为256MB,当它被使用到只剩下不到20MB的时候,就会出现你这个问题。如果物理内存小于4G,那么这个数值又不一样。

如果你从任务管理器里面观察到NonpagedPool使用比较大的时候,我们就可以确定你遇到的就是这个问题。在之前我提供给你的文章里面有第二种方法:http://support.microsoft.com/kb/177415/

关键是我们需要找到谁在大量使用NonpagedPool。

如果你自己还是搞不定这个问题的话,可以找Microsoft的技术支持。

看起来你的问题就是Kernel Mode Memory leak

一般说来NonPaged用到几十个MB就差不多了,而你用到了130MB

但是有点奇怪的是你并没有开启/3GB,那么就算用到了130MB,也还有足够的剩余量。如果开启了/3GB的话,在4G内存的Windows 2003上面,Kernel mode 的NonPaged总大小约为150MB,150-130 = 20MB。

前面我说过,剩余大小<20MB的时候就会发生问题。

现在你只能用http://support.microsoft.com/kb/177415/的方法来看谁用掉了Kernel mode的NonPagedPool了。一般来讲,某些驱动程序会导致leak,如果不同的帐户开启了无数个桌面应用的话,也会导致Kernel Mode Memory leak


(此为windows 2008系统任务管理器图)

最终解决方案:

要变通解决此问题,启用 EnableAggressiveMemoryUsage 注册表项在注册表中。当启用了 EnableAggressiveMemoryUsage 注册表项 Http.sys 驱动程序会停止接受新的连接时 LowNonPagedPoolCondition 事件的通知是驱动程序。此事件发生时可用的非分页缓冲的池内存为少于 8 MB。这些值可能会更改在将来的版本的 Windows。

若要向注册表中添加 EnableAggressiveMemoryUsage 注册表项,请按照下列步骤操作:

单击 开始、 单击 运行,键入 注册表编辑器,然后单击 确定

找到并单击下面的注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters

编辑 菜单上指向 新建,然后单击 DWORD 值

键入 EnableAggressiveMemoryUsage,然后按 ENTER 键。
用鼠标右键单击 EnableAggressiveMemoryUsage、 单击 修改,在 数值数据 框中键入 1,然后单击 确定

退出注册表编辑器。
单击 开始、 单击 运行、 在 打开 框中键入 Cmd,然后单击 确定

命令提示符键入 净停止 http/y,然后按 ENTER 键。
命令提示符键入 net start w3svc,然后按 ENTER 键。

其它的解决方案:

1.前段时间我的web服务器也有类似的问题,搞了半天也没有搞好,后来安装最新的sp+所有新补丁就好了 (不可取)

2.IIS应用程序池设置不合理造成的

首先访问量大的站点要单独自己一个应用程序池

其次应用程序池属性的参数设置注意一下几点

回收中仅设置指定时间回收

性能中去掉请求队列限制的勾

运行状况里去掉启用快速失败保护的勾,关闭时间限制设置到180秒以上

标识中预定义账户改为本地系统 (优先考虑这个方案)

3.连接数超过了限制。

使用NET STOP W3SVC停止然后再NET START W3SVC试试。

此外,修改连接池中的连接数量。

还有,重新设定ASP中SESSION的超时,使IIS能较快地释放无效资源和连接。

4.检查程序,是否有死循环,资源没有是否(如:数据库连接没有close, 非托管代码(c/c++ DLL)没有释放)

5.根据系统事件日志,查看“应用程序” 和 “系统” 中是否有IIS相关的错误

http://www.camnpr.com/archives/577.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: