win2003中的w3wp.exe进程大量占用cpu资源的各种问题解决方法
程序员文章站
2022-04-19 11:14:15
1:使用 microsoftjet 数据库引擎 web 应用程序可能停止响应负载,造成假死: 原因:发生此问题是因为 jet 数据库引擎中存在缺陷。 microsoft w...
1:使用 microsoftjet 数据库引擎 web 应用程序可能停止响应负载,造成假死:
原因:发生此问题是因为 jet 数据库引擎中存在缺陷。 microsoft windows server 2003 上只会出现此问题。 在 windows server 2003, com+ 更改频率 cofreeunusedlibraries 函数被调用。 此更改导致 jet 驱动程序以初始化频繁。 此行为可能导致死锁条件。
web 服务器负载时最常出现此问题。
补丁下载:
chs:windowsserver2003-kb838306-x86-chs.exe
enu:windowsserver2003-kb838306-x86-enu.exe
在iis6下,经常出现w3wp.exe的内存及cpu占用不能及时释放,从而导致服务器响应速度很慢。
解决内存占用过多,可以做以下配置:
1、在iis中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。再设置当内存占用超过多少(如500m),就自动回收内存。
解决cpu占用过多:
1、在iis中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的cpu监视,不超过25%(服务器为4cpu),每分钟刷新,超过限制时关闭。
根据w3wp取得是那个一个应用程序池:
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池。(iisapp实际上是存放在c:\windows\system32目录下的一个vbs脚本,全名为iisapp.vbs,如果你和我一样,也禁止了vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“microsoft (r) windows based script host”来执行,就可以得到pid与应用程序池的对应关系。)
3、到iis中察看该应用程序池对应的网站,就ok了,做出上面的内存或cpu方面的限制,或检查程序有无死循环之类的问题。
quote:
环境:win2003server+iis+asp+mssql
现象:每隔一段时间(不定,有时几分钟,有时半小时)出现一次网站打开非常缓慢,甚至有时会出现超时打不开站点,此时查看服务器端的进程,cpu占用率达到100%,其中w3wp占用70~80%,sql占用20~30%。所有服务器端的操作也变得缓慢。
初期解决方法:每次现象出现时,立即登录服务器直接结束w3wp进程或重启iis服务,平均每天约十次操作,由于服务器存放于远程机房,所有操作都是远程控制进行,有时会因此出现远程无法连接登录的情况,只能通过电话通知机房管理人员重启服务器解决,此过程导致用户抱怨不断。
经过网上查阅资料,发现此类现象多数由于网页代码不合理所致,以下情况会导致此类现象发生:
1、代码中多处使用application、seesion等服务器缓存,导致服务器资料过度占用;
2、代码有不合理语法,死循环等;
3、数据库损坏,尤其是access数据库;
4、装过多第三方软件或插件,与iis或网页功能代码冲突。
第一阶段排查:根据查阅到的参考资料逐项分析
1、服务器上所有站点代码均为公司设计人员自行编写,可证实并无过多调用服务器缓存语法(排除)
2、代码是否存在不合理语法(不确定)
3、根据情况来看,iis进程占用率升高时,sql占用率同时升高,应为sql数据库的站点,根据现象判断,库或表应该正常,估计是数据方面可能有误;(不确定)
4、服务器端除了基本的系统服务,防杀毒及网站运作必备服务之外,并无多余第三方软件,机率不大(排除)。
经过以上分析判断,将不确定项连起来得出的结论是:某个采用了sql数据库的网站网页代码存在不合理语法,导致iis和sql进程cpu占用率过高。
第二阶段排查:
确定范围,接着继续把范围缩小。
由于服务器上采用sql数据库的站点并不多,便于建立独立进程id来观察,将所有采用sql数据库的站点在iis管理器中分别建立独立的应用程序池,然后通过cmd界面输入:iisapp -a 命今查看并记录下各iis池的进程id号,通过多次现象重现时的观察,有个iis进程id是导致此次问题的罪魁祸首。
补充:
限制sql的内存。企业管理器——sql的属性(一般是local)——“内存”标签,在这里看内存的设置,把最大值改成100m吧(这个确实有一定的作用)。只不过还是存在系统资源占用比较多的,继续寻找产生的原因。。。
原因:发生此问题是因为 jet 数据库引擎中存在缺陷。 microsoft windows server 2003 上只会出现此问题。 在 windows server 2003, com+ 更改频率 cofreeunusedlibraries 函数被调用。 此更改导致 jet 驱动程序以初始化频繁。 此行为可能导致死锁条件。
web 服务器负载时最常出现此问题。
补丁下载:
chs:windowsserver2003-kb838306-x86-chs.exe
enu:windowsserver2003-kb838306-x86-enu.exe
在iis6下,经常出现w3wp.exe的内存及cpu占用不能及时释放,从而导致服务器响应速度很慢。
解决内存占用过多,可以做以下配置:
1、在iis中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。再设置当内存占用超过多少(如500m),就自动回收内存。
解决cpu占用过多:
1、在iis中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的cpu监视,不超过25%(服务器为4cpu),每分钟刷新,超过限制时关闭。
根据w3wp取得是那个一个应用程序池:
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池。(iisapp实际上是存放在c:\windows\system32目录下的一个vbs脚本,全名为iisapp.vbs,如果你和我一样,也禁止了vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“microsoft (r) windows based script host”来执行,就可以得到pid与应用程序池的对应关系。)
3、到iis中察看该应用程序池对应的网站,就ok了,做出上面的内存或cpu方面的限制,或检查程序有无死循环之类的问题。
quote:
环境:win2003server+iis+asp+mssql
现象:每隔一段时间(不定,有时几分钟,有时半小时)出现一次网站打开非常缓慢,甚至有时会出现超时打不开站点,此时查看服务器端的进程,cpu占用率达到100%,其中w3wp占用70~80%,sql占用20~30%。所有服务器端的操作也变得缓慢。
初期解决方法:每次现象出现时,立即登录服务器直接结束w3wp进程或重启iis服务,平均每天约十次操作,由于服务器存放于远程机房,所有操作都是远程控制进行,有时会因此出现远程无法连接登录的情况,只能通过电话通知机房管理人员重启服务器解决,此过程导致用户抱怨不断。
经过网上查阅资料,发现此类现象多数由于网页代码不合理所致,以下情况会导致此类现象发生:
1、代码中多处使用application、seesion等服务器缓存,导致服务器资料过度占用;
2、代码有不合理语法,死循环等;
3、数据库损坏,尤其是access数据库;
4、装过多第三方软件或插件,与iis或网页功能代码冲突。
第一阶段排查:根据查阅到的参考资料逐项分析
1、服务器上所有站点代码均为公司设计人员自行编写,可证实并无过多调用服务器缓存语法(排除)
2、代码是否存在不合理语法(不确定)
3、根据情况来看,iis进程占用率升高时,sql占用率同时升高,应为sql数据库的站点,根据现象判断,库或表应该正常,估计是数据方面可能有误;(不确定)
4、服务器端除了基本的系统服务,防杀毒及网站运作必备服务之外,并无多余第三方软件,机率不大(排除)。
经过以上分析判断,将不确定项连起来得出的结论是:某个采用了sql数据库的网站网页代码存在不合理语法,导致iis和sql进程cpu占用率过高。
第二阶段排查:
确定范围,接着继续把范围缩小。
由于服务器上采用sql数据库的站点并不多,便于建立独立进程id来观察,将所有采用sql数据库的站点在iis管理器中分别建立独立的应用程序池,然后通过cmd界面输入:iisapp -a 命今查看并记录下各iis池的进程id号,通过多次现象重现时的观察,有个iis进程id是导致此次问题的罪魁祸首。
补充:
限制sql的内存。企业管理器——sql的属性(一般是local)——“内存”标签,在这里看内存的设置,把最大值改成100m吧(这个确实有一定的作用)。只不过还是存在系统资源占用比较多的,继续寻找产生的原因。。。