在WINDOWS2003 iis6下,w3wp的内存占用往往不能及时释放,导致服务器响应速度慢。
实际案例
服务器配置
至强2.8G
内存512M
2个SCSI硬盘(软映像)
系统windows 2003
现在,一个由ASP.NET开发的网站已经挂了,但是有少量的访问者。问题是服务器每次运行2-3天,访问网站特别慢,重启服务器后就正常了。
看进程的内存使用情况,发现w3wp.exe和sqlservr.exe进程占用的内存相当大,达到170 m(各)以上,物理可用内存也差不多用完了(服务器重启时占用的内存只有40 m多)。
以前网站挂在虚拟机上,数据库单独挂,从来没有过。
后来原版本移植到新服务器上就出现了这个问题。
另一个问题是,当您在SQL企业管理器中查看SQL进程时,您会发现许多由。net在休眠,但是占用内存,无法释放。
采取措施:
IIS服务管理器-应用程序池-添加您的应用程序并设置最大内存。当程序达到最大内存时,它会自动重启。
内存升级到2G,流量比较高。一般运行差不多24小时就要重启了,内存还没用完。W3WP进程占了189兆,SQL占了200多兆,那就得重启了,不然整个站点就瘫痪了。
解决方案1:
W3wp.exe是你的ASP.NET申请的主人。如果使用大量的会话、缓存等资源,会话超市持续时间长,内存占用会比较大。应用程序池是一项旨在提高性能的功能。
但也消耗了大量内存。此外,在Windows Server 2003中关闭大多数服务(不需要时可以关闭)也可以节省一些内存。
1.怀疑应用在程序中的缓存,
2.2.CACHE中有大量数据。
3.经常刷新缓存
4.没有办法设计缓存。
解决方案2:
跟踪SQL的调用记录,记录每次写大量数据到缓存或SESSION的时间,看是否过于频繁。
1.2003年冬天,ASP.NET的进程是w3wp.exe。
2.512M内存足够个人使用,但在服务器上不够用,尤其是WIN 2003 ASP.NET SQL Server。尤其是sql server,它非常占用内存,如果不加以控制,
他会占用所有的物理内存(只有几十米下至100米)。Win2003本身将占用大约1.5亿英镑。什么都没有了。
3.优化asp.net程序,就向楼上的说的那样,少用或不用session cache application之类的东西,再有就是是不是有翻页的地方,翻页处理不好也是会占很多内存的。
4.限制sql的内存。企业管理器——SQL的属性(一般是local)——“内存”标签。在这里看内存的设置,把最大值改成100M。
解决方法三:
研究了一下,可以做以下配置:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。同时,设置同时运行的w3wp进程数目为1。再设置当内存或者cpu占用超过多少,就自动回收内存
一般来说,这样就可以解决了。但仍然会出现个别网站因为程序问题,不能正确释放。
那么,怎么样才能找到是哪一个网站的?
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池
3、到iis中察看该应用程序池对应的网站,就ok了。
解决方法四:
建义2003系统安装至少1G内存。
w3wp.exe是2003下的一个iis进程,至于sql占用内存,那有可能是因为你的sql没有设置占用内存上限
在IIS6下,经常出现w3wp.exe的内存及CPU占用不能及时释放,从而导致服务器响应速度很慢。
解决内存占用过多,可以做以下配置:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。再设置当内存占用超过多少(如500M),就自动回收内存。
解决CPU占用过多:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的CPUjian视,不超过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方面的限制,或检查程序有无死循环之类的问题。