发现进程中的w3wp占用率太高。html
通过查询,发现以下:web
w3wp.exe是在IIS(因特网信息服务器)与应用程序池相关联的一个进程,若是你有多个应用程序池,就会有对应的多个w3wp.exe的进程实例运行。这个进程用来分配大量的系统资源。这个进程对于系统的稳定和安全具备重要的意义,不能轻易的结束掉这个进程。spring
找到解决办法:(Windows2008中能够经过:服务器管理器->角色\web服务器\iis管理器 找到网站下的应用程序池,直接在程序池项的右键中修改)数据库
解决CPU占用过多:windows
一、在IIS中对每一个网站进行单独的应用程序池配置。即互相之间不影响。安全
二、设置应用程序池的CPU监视,不超过25%(服务器为4CPU),每分钟刷新,超过限制时关闭。服务器
根据w3wp取得是哪个应用程序池:app
一、在任务管理器中增长显示pid字段。就能够看到占用内存或者cpu最高的进程pidpost
二、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击肯定。而后再次运行就能够了。这样就能够看到pid对应的应用程序池。(iisapp其实是存放在C:\windows\system32目录下的一个VBS脚本,全名为iisapp.vbs,若是你和我同样,也禁止了Vbs默认关联程序,那么就须要手动到该目录,先择打开方式,而后选“Microsoft (r) Windows Based Script Host”来执行,就能够获得PID与应用程序池的对应关系。)优化
三、到iis中察看该应用程序池对应的网站,就ok了,作出上面的内存或CPU方面的限制,或检查程序有无死循环之类的问题。
解决内存占用过多,能够作如下配置:
一、在IIS中对每一个网站进行单独的应用程序池配置。即互相之间不影响。
二、设置应用程序池的回收时间,默认为1720小时,能够根据状况修改。再设置当内存占用超过多少(如500M),就自动回收内存。
个人设置以下:
首先是对CPU的限制:在启用cpu监视后,我设置该应用程序池最大的cpu使用率为50%。设置刷新cpu时间为1分钟,设置操做为“关闭”。最大工做进程数设置为1。这个意思是,IIS刷新检测该独立池的CPU使用状况时间为1分钟,若是超过设置的cpu限制50%,就会发出关闭池的指令,要求池在指定的时间内关闭。若是池成功在这个时间内关闭,IIS会重启动一个新池,此段时间很短,通常不会有什么感受,池就从新开启了,对于访问网站的人基本是不会有感受的。但若是池没有在指定时间内关闭,IIS就会强行关闭它一个刷新CPU时间。在这个中止的时间内,网站没法访问,提示“Service Unavaliable”。 关闭时间和启动时间间隔设置:设短一些好比10秒,这样当您的网站程序大量占用系统资源时IIS自动快速回收进程而且快速启动进程,您的网站暂时还能够将就着工做。
对内存的限制及进程回收时间的设置:我设置为内存占用超过800M就自动回收内存,虚拟内存没有作限制。进程回收时间我保持默认没有修改。各位能够根据本身的状况设置更短的时间。对应用程序池最大虚拟内存也能够在此进行设置,超过了设置的最大虚拟内存,该池会就被回收。
最后综合落伍wlmmc的一些经验,总结一些须要注意的问题:
一、要限制一个站点的CPU使用,必须将该站点设置为独立应用程序池,共用应用程序池是没法限制单个站点的。IIS独立应用程序池,就须要独立的进程,很是消耗内存。独立池越多,就有越多的W3WP进程。对于每一个站点均要独立应用程序池的服务器,在通常的普通P43.0 2G内存 的普通服务器上,建议不要超过50个站点,最好30之内,否则服务器压力很是大。在配置上,我通常把资源消耗较大的网站独立一个池,通常普通BBS或者生成HTML的系统大概5个站一个池。普通网站以及一些企业站点均共用一个池。
二、根据wlmmc的经验,在服务器硬件容许的状况下,通常不要限制站点内存使用,这样可以保证网站运行,不会出现用户掉线状况。须要限制某站的最大虚拟内存不要小于64M,否则可能出现一些未知的错误。
三、这些都不是根本解决办法,它的根本问题是网站程序有问题,要解决根本问题还要从程序查起。根据本文开头提到的方法查到具体的应用程序池,找到使用此应用程序池的网站,解决网站程序存在的问题,如死循环之类。
四、除了w3wp.exe, 在调用数据库进行大量查询操做的时候,也会大量占用CPU资源,这是不免的(数据库方面的语句及结构优化不在本文讨论范围以内)。我的认为,只要不是CPU长时间占用100%, 通常在75%左右都是正常的。