W3wp.exe占用CPU及内存资源
问题背景
最近使用一款系统,但是经常出现卡顿或者用户账号登录不了系统。后来将问题定位在了服务器中的“w3wp.exe”这个进程。在我们的用户对系统进行查询、修改等操作后,该进程占用大量的CPU以及内存资源,导致服务器运行缓慢,用户也是怨声载道。曾经尝试结束掉这个进程,但是没多久这个进程又“不知廉耻”的占用大量的CPU和内存。我是个懒惰的人,实在难以想象每次都需要到服务器中结束这个进程,所以想个解决办法一劳永逸!
W3wp.exe简介
下面是百度百科上的介绍:
w3wp.exe是在IIS(因特网信息服务器)与应用程序池相关联的一个进程,如果你有多个应用程序池,就会有对应的多个w3wp.exe的进程实例运行。这个进程用来分配大量的系统资源。
常见问题
由于我们的服务器空间是刚划分出来的,发布了一个WEB站点,也就三两个用户在使用系统。所以初步断定是由于网站程序引起的。但是依然将常见的问题一一列举出来,以备不测。
- 网站程序的死循环或大量运算引起进程占用大量系统资源
- 服务器资源没有自动释放
- 缓存文件资源引起的程序越来越慢
- WEB站点访问量大
解决方案
1. 检查WEB站点。结束掉“W3wp.exe”进程,治标不治本,并不能从根本上解决问题。所以我们先要确定网站的应用程序池,查找到对应的网站检查网站程序。事实上如果你发布的WEB站点只有一个,那么就可以省去查找占用系统资源最高的PID进程对应的WEB站点了。但是通常情况下并不是这样的,所以把下面的解决方案贴上来。当然,在运行命令提示符“iisapp -a”的时候,如果系统没有任何提示,在“C:\windows\system32”中检查是否缺少这个脚本。
- 在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
- 设置应用程序池的CPU监视,不超过25%(服务器为4CPU),每分钟刷新,超过限制时关闭。
- 根据w3wp取得是哪一个应用程序池。
在任务管理器中点击“查看--选择列”增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid 在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池。(iisapp实际上是存放在C:\windows\system32目录下的一个VBS脚本,全名为iisapp.vbs,如果你和我一样,也禁止了Vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“Microsoft (r) Windows Based Script Host”来执行,就可以得到PID与应用程序池的对应关系。) 到iis中察看该应用程序池对应的网站,就ok了,做出上面的内存或CPU方面的限制,或检查程序有无死循环之类的问题。
2. 设置CPU监视。在设置CPU监视时,看到网上的许多资料都是IIS6的。所以请先注意下自己IIS的版本。例如我的版本是IIS7。右击WEB站点对应的应用程序池,选择“高级设置”。图示中若设置“已启用处理其关联=true”,那么服务器会在每隔一分钟监视一次CPU。若果超过95%的利用率,那么就会关闭掉“W3wp.exe”进程。完美解决我的问题,但是从网上对IIS7的各种分析来说,服务器监测关闭掉进程后经常不会重新启动新进程,必须手动重启。如果占用内存过多可以在对下面的“回收”进行设置。
3. 清理缓存文件。服务器长时间运行后没有定时清理缓存文件也有可能造成程序运行越来越慢。可以通过打开“c:\windows\temp\”目录,清空里面的缓存文件。或者直接通过cmd命令符”输入“ del c:\windows\temp*.* /s /q”。
参考资料
作者:弦断
出处:http://www.cnblogs.com/ucas/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。