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