说点关于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修复它,问题就解决。