iis占用服务器内存,W3wp.exe 进程占用内存高消耗CPU近100%导致网站反应速度缓慢的解决方案
如何降低W3WP.EXE占用的内存和CPU?结合网上的诸多建议,主要的解决办法是:
a.在IIS中对每个网站进行单独的应用程序池配置;
b.合理的配置你的应用程序池;
c.找出具体网站站点的程序问题。
问题描述
环境:win2003server+IIs+ASP+MSSQL
现象:每隔一段时间(不定,有时几分钟,有时半小时)出现一次网站打开非常缓慢,甚至有时会出现超时打不开站点,此时查看服务器端的进程,CPU占用率达到100%,其中w3wp占用超过80%,于是所有服务器端的操作也变得缓慢。
简单解决方法:每次现象出现时,立即登录服务器直接结束w3wp进程或重启IIS服务。
解决方案参考
针对该类问题,具体可参考如下所述方法来逐步寻找根本的解决途径:
1、在IIS中对每个网站进行单独的应用程序池配置,即使之互相之间不影响。(但需要注意一点:进程池越多越占用内存,由于访问网站之后往往不会立即释放内存资源。)
2、设置应用程序池的回收时间。默认为1720小时,可以根据情况修改。同时,设置同时运行的w3wp进程数目为1。再设置当内存或者cpu占用超过多少,就自动回收内存 。
3、设置固定时间回收进程。比如在凌晨1:00至9:00之前访问人数都比较少,影响很少小,可以设定每天在这个时间段内进行内存回收,以减少服务器因 为内存不足带来的影响。设定固定时间回收进程在IIS6中没有限制次数,所以可根据实际情况来设定时间。比如:晚上12:00,8:00,12:30,6:30等时间进行有效的进程池资源回收。
一般来说,做完以上操作就可以解决了。但仍然会可能出现因为个别网站的程序问题,不能及时释放资源。所以我们可以找出该网站,然后调试分析其程序问题所在。
那么,怎么样才能确定是哪一个网站呢?参考方法如下:
1、在任务管理器中增加显示pid字段。方法为:打开任务管理器-切换到《详细信息》,在列表上点右键,选中“PID(进程标识符)”前的复选框。这样就可以看到占用内存或者cpu最高的进程pid。
2、在命令提示符下运行iisapp -a。注意,第一次运行,可能会提示没有js支持,点击确定进行注册,然后再次运行该命令就可以了。这样就可以看到pid对应的应用程序池。
3、到iis中察看该应用程序池对应的网站,进行更详细的分析,具体问题具体对待。
最后的补充
总结一些需要注意的问题:(摘)
1、 要限制一个站点的CPU使用,必须将该站点设置为独立应用程序池,共用应用程序池是无法限制单个站点的。IIS独立应用程序池,就需要独立的进程,非常消耗内存。独立池越多,就有越多的W3WP进程。对 于每个站点均要独立应用程序池的服务器,在一般的普通P43.0 2G内存 的普通服务器上,建议不要超过50个站点,最好30以内,不然服务器压力非常大。在配置上,我一般把资源消耗较大的网站独立一个池,一般普通BBS或者生 成HTML的系统大概5个站一个池。普通网站以及一些企业站点均共用一个池。
2、根据wlmmc的经验,在服务器硬件允许的情况下,一般不要限制站点内存使用,这样能够保证网站运行,不会出现用户掉线情况。需要限制某站的最大虚拟内存不要小于64M,不然可能出现一些未知的错误。
3、这些都不是根本解决办法,它的根本问题是网站程序有问题,要解决根本问题还要从程序查起。根据本文开头提到的方法查到具体的应用程序池,找到使用此应用程序池的网站,解决网站程序存在的问题,如死循环之类。
4、除了w3wp.exe, 在调用数据库进行大量查询操作的时候,也会大量占用CPU资源,这是难免的(数据库方面的语句及结构优化不在本文讨论范围之内)。个人认为,只要不是CPU长时间占用100%, 一般在75%左右都是正常的。