以文本方式查看主题 - 康柏仕电脑学院 (http://combss.com/bbs/index.asp) -- 硬件及网络技术资料储存区 (http://combss.com/bbs/list.asp?boardid=61) ---- w3wp.exe占用CPU100%的解决办法 (http://combss.com/bbs/dispbbs.asp?boardid=61&id=2135) |
-- 作者:轻轻风聆 -- 发布时间:2008/12/10 10:17:38 -- w3wp.exe占用CPU100%的解决办法 说点关于W3WP.EXE的知识.
Q : W3WP.EXE,应用程序,应用程序池之间的关系 A : 一个应用程序池可以包含多个应用程序,一个应用程序池创建一个W3WP.EXE进程.那么我们就不能简单的说一个进程池对应一个W3WP.EXE进程了!其实是多个应用进程池对应一个W3WP.EXE进程的. Q : 如何启动和关闭W3WP.EXE这个进程 A : W3WP.EXE这个进程将在你访问www应用程序的时候启动.有人就会这么问了:"我启动了一个Web应用程序,发现系统自动创建了一个W3wp.exe进程。但我关闭这个Web应用程序后,发现这个刚创建的W3Wp.exe进程还在,请问如何关闭该进程。"这个进程不会在你关闭了这个程序以后,就马上关闭的.那是因为Http是无连接的访问,当你关闭了web网页,不会返回相应的关闭信息,所以W3WP.EXE这个进程不会因为你关闭了web应用程序尔关闭. Q : 那么如何关闭这个进程呢? A : 在应用程序池的配置中,"空闲超时"中设定合适的时间,系统默认的是20分钟.设定好指定的时间,那么在这个时间范围内没有在访问应用程序,那么系统会自动的关闭W3WP.EXE这个进程的.而不需要我们人为的干预的.也可以在Windows任务管理器里面,结束这个进程 Q : 如何让W3WP.EXE进程长时间的运行. A : W3WP.EXE这个进程的默认生命是1740分钟,但依然是在这种默认的自然规律下,W3WP.EXE将在自己失业20分钟后,被系统直接枪杀.这样就可以看出,要想让W3WP.EXE长时间的生存,那我们可以通过”空闲超时”不作处理来达到我们的目的. Q : 在IIS6下,经常出现w3wp.exe的内存及CPU占用不能及时释放,从而导致服务器响应速度很慢。 A: 解决内存占用过多,可以做以下配置 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方面的限制,或检查程序有无死循环之类的问题。 A2 : by 小步舞曲 查看占用cpu的w3wp进程里面里面有那个用户呼叫的token Q : 另一种加载了某程序后发生w3wp.exe问题 A: 修改C:\\WINDOWS\\Microsoft.NET\\Framework\\v1.1.4322\\CONFIG\\machine.config,再配置节点<processModel>中有一个属性"memoryLimit",这个属性的值是一个百分比,默认为"60"(注意,是60%不是60M),即制定了ASP.NET进程能够使用所有物理内存的60%,当ASP.NET使用的内存量草果这个限额时,IIS会开始自动回收进程,即创建一个新的进程去负责应付HTTP请求,而将旧进程所占用的内存回收. #2楼发布者:socbuspet时间:2007-10-09 10:07:59 在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方面的限制,或检查程序有无死循环之类的问题。 #3楼发布者:socbuspet时间:2007-10-09 10:08:11 特征:
服务器正常CPU消耗应该在75%以下,而且CPU消耗应该是上下起伏的,出现这种问题的服务器,CPU会突然一直处100%的水平,而且不会下降。查看任务管理器,可以发现是w3wp.exe消耗了所有的CPU空闲时间,管理员在这种情况下,只好重新启动IIS服务,奇怪的是,重新启动IIS服务后一切正常,但可能过了一段时间后,问题又再次出现了。 直接原因: 有一个或多个ACCESS数据库在多次读写过程中损坏,微软的MDAC系统在写入这个损坏的ACCESS文件时,ASP线程处于BLOCK状态,结果其他线程只能等待,IIS被死锁了,全部的CPU时间都消耗在w3wp.exe中。 解决办法: 在iis管理器里面设置多个应用程序池, 并把虚拟主机站点分别加入应用程序池。在多应用程序池的情况下,每个应用程序池会对应生成一个w3wp.exe文件。通过任务管理器可以查看到所有w3wp.exe占用cpu利用率情况。 通过iis管理器打开应用程序池,可以逐个停掉应用程序池。一边停应用程序池,一边在任务管理器里面观察哪个w3wp.exe的cpu利用率一下子从降下来,cpu利用率恢复正常。这样可以判断是那个应用程序池出了问题。然后可以再建立多个应用程序池,每一个应用程序池对应一个站点。这样逐个停应用程序池,就可以确定到底是哪个网站出问题。最有问题的往往是计数器类的ACCESS文件,例如:“**COUNT.MDB” ,“*COUNT.ASP”,找到这个文件后,可以删除它,或下载下来,用ACCESS2000修复它,问题就解决。 |
-- 作者:轻轻风聆 -- 发布时间:2008/12/10 10:18:08 -- W3WP进程占用CPU100%另类解决方法 最近几天碰到一个问题,非常烦恼。公司服务器上W3WP进程总是会占用100%CPU,然后IIS6就自动停止响应,CPU占用下降之后才会恢复正常的网站访问,高峰期居然每几分钟就来一次。查了很多的资料,发现很多朋友都遇到相关的问题,但并没有找到一个确实的解决方法。不过还是让我找到了一个可以绕开的方法。 环境:Win2003 IIS6 Asp.net1.1 SqlServer2000 最后通过询问朋友,终于找到了一个可以绕过暂时解决的方法。将IIS6.0模拟成IIS5.0运行。具体操作如下:打开IIS管理器,右键点击网站---属性---服务---运行在IIS5.0隔离模式下---应用---确定。通过这种设置之后,应用程序池就不见了,因为IIS5实际上并没有应用程序池。 经过这样修改之后,发现程序基本稳定运行,不会再出现服务器忙之类的错误了。尽管问题暂时解决了,但我想这个应该不是最终的解决方案,最终解决方案还是应该彻底清查程序代码,一定是程序代码其中有些效率不高或者导致性能下降的片段直接导致了这个问题。 |