w3wp.exe的进程占用了100%

| |
[不指定 2007/07/06 16:27 | by sunle ]
最近在互联网上提这个问题的网友较多,典型问题:这几天服务器总是运行缓慢,远程登录后发现一个w3wp.exe的进程占用了100%   cpu

在Windows   Server   2003中对于每一个Web应用,IIS   6.0都用一个独立的w3wp.exe的实例来运行它。w3wp.exe也称为工作进程(每一个主机头都会有一个)

直接在任务管理器中结束进程是不起作用的,结束后不久它会执行启动,要想结束它可以在IIS中找到相应的应用程序池停止相应的应用程序池工作。

这些都不是解决办法,它的根本问题是你的那个网站程序有问题,在找到问题以前可以先打开IIS找到应用程序池先用右键属性中设置“性能”把其中的CPU设成大于60%关闭应用程序池,把关闭时间和开启时间设短一些比如10秒,这样当您的网站程序大量占用系统资源时IIS自动快速回收进程并且快速启动进程,您的网站暂时还可以将就着工作。

要解决根本问题还要从程序查起,您可以在IIS中的应用程序池中右键创建多个应用程序池,然后在每个主机头中的文件家选项的底部将应用程序池对应道刚才建好的应用程序池,然后一个一个关闭在任务管理器中看看是哪个程序占用的资源较大。

下面是一些网友的相关贴子也许对大家有帮助



朋友的WEB服务器一直运行正常,但这几天CPU占用率一直将近100%,遂去看个究竟。
服务器采用Windows   2003,   网站使用ASP+Access数据库,   查看进程列表发现w3wp.exe   占用了70%以上的CPU,
查看WEB日志,站点访问量不大,查看TCP连接也不多。用net   stop   w3svc停掉WEB服务,CPU占用立即正常,net   start   w3svc启动WEB后不久现象又出来了。停止所有虚拟站点,新建一个虚拟站点发现并没有问题,怀疑是站点本身的代码问题。
检查首页代码,大致是如下结构:

粗看一下并没有问题,但就是这段代码造成了w3wp.exe占用大量CPU,难道是死循环?似乎没有理由。在循环体内加入计数,发现确实是死循环,说明RS.EOF一直为false,加入如下代码:

if   RS.EOF   =   true   then   Response.Write   "EOF   is   true"
if   RS.EOF   =   false   then   Response.Write   "EOF   is   false"

发现输出竟然是EOF   is   true   EOF   is   false,   说明无法判断RS.EOF的值,为何如此百思不得其解。检查数据库,发现库中并没有mytable表,   如果该表不存在,RS.Open   "SELECT   *   FROM   mytable",   conn   就会出错,为何没有出错,很有可能捕获的异常被忽略了。
检查包含文件conn.asp,   发现了异常处理代码:

On   Error   Resume   Next


原来问题在此。

On   Error   Resume   Next忽略了查询表时的失败以及后续的错误,造成进入死循环。
那为何网站本来运行正常,现在却找不到mytable表了呢?仔细检查网站才发现“有‘客’自远方来”,上传了后门工具、删除了多张数据表,害我忙活了一天。

更多的内容大家还可以到:http://www.microsoft.com/china/technet/security/gu...

查找更详细的安全设置

windows2003   iis6.0假死问题解决

这几天服务器总是运行缓慢,远程登录后发现一个w3wp.exe的进程占用了100%   cpu。

内文分页: [1] [2]
Tags: ,

个人备忘 | 评论(0) | 引用(0) | 阅读(1384)
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]