博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net内存溢出问题
阅读量:5356 次
发布时间:2019-06-15

本文共 993 字,大约阅读时间需要 3 分钟。

在ASP.NET Web服务器上,ASP.NET所能够用到的内存,通常不会等同于所有的内存数量。在machine.config配置文件中,配置节<processModel>中有一个属性“memoryLimit”,这个属性的值是一个百分值,默认为“60”,即指定了ASP.NET进程(在任务管理器中大家就可以看到ASP.NET的进程,IIS5中为aspnet_wp,IIS6中为w3wp)能够使用所有物理内存的60%。当ASP.NET使用的内存量超过这个限额时,IIS会开始自动回收(recycle)进程,即创建一个新的进程去负责应付Http请求,而将旧进程所占用的内存回收。

当我们有一台很大内存的服务器时,“memoryLimit”这个值是需要进行适当的调整的。比如我们准备了一台4G内存的服务器,那么4G×60%=2.4G。但是,对于Win32操作系统,一个进程所能占用的所有内存空间只有2G。当ASP.NET进程占用的内存开始达到2G时,由于它并没有达到2.4G的“回收阈值”,所以IIS不会启动recycle进程操作,但是由于Win32的限制,实际上已经不能给这个进程分配更多的内存了,于是,OutOfMemoryException就很可能会被抛出了。为了避免这样的情况,我们就必须将“memoryLimit”适当调小,以让IIS更早的进行进程回收。
微软推荐的ASP.NET进程占用内存是不超过60%,并最好使计算出的实际值不超过800M。就是说,对于一台4G内存的服务器,最好将“memoryLimit”属性设置成“20”。设置一个适当的回收阈值,让IIS适时的进行进程回收,对于保证整个服务器的稳定运行,避免OutOfMemoryException是非常重要的。
在IIS6中,ASP.NET进程的回收阈值不再由配置节中的“memoryLimit”属性决定,而是由IIS管理器中的应用程序池配置中的设置决定。
但是,即使正确设置了这些配置,也不能保证完全避免OutOfMemoryException的发生,原因可能是多样而复杂的,比如内存回收操作可能耗时太多等等。开发人员要注意的,就是在代码中时刻牢记不要无谓的使用和浪费内存。:)

转载于:https://www.cnblogs.com/554006164/archive/2012/05/04/2482673.html

你可能感兴趣的文章
I1-3 Telephone English Teacher:Taylor
查看>>
English trip EM3-PE 3A Roommate Teacher:Ginny
查看>>
English trip EM2- PE 5A COMMUNICATION 交流 Teacher:Corrine
查看>>
I4-6 Success Teacher:Taylor
查看>>
English trip V2-B 21 Personal History Teacher: Russell
查看>>
(转)不格式化硬盘 机密数据也能安全清除 -- 有待机会测试
查看>>
English trip V2-B 22 Tell a Story Teacher: Russell
查看>>
Centos8 新功能记录笔记
查看>>
The "Go" Learning Trip -- 0. Base build
查看>>
English trip EM3-LP 2A Around The World Teacher: Olivia
查看>>
[转] CVE-2019-1367 脚本引擎内存损坏漏洞
查看>>
English trip EM3-PE 2A Teacher:Lamb
查看>>
English trip EM3 LP 1B Have a good weekend Teacher:Ryan
查看>>
(转)CentOS / RHEL 7/6 自动更新安全补丁
查看>>
English trip EM3 LP4A ROOMS Teacher:Lamb
查看>>
English trip EM3-PE 4A Rooms Teacher:Taylor
查看>>
English trip EM3 LP 4B Home Design Relationship Teacher:Ryan
查看>>
I4-6 Surprise Teacher:Lamb Talk about Holidays and Festives People do what
查看>>
我追求的是什么
查看>>
AJAX的出现与跨域处理
查看>>