当前位置: 首页 > news >正文

ASP.NET中的OutOfMemoryException

在博客园看到了一位园友写的文章《如何处理OutOfMemoryException异常?》,于是想和大家交流一下ASP.NET中出现OutOfMemoryException的问题。

实际上,在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的发生,原因可能是多样而复杂的,比如内存回收操作可能耗时太多等等。开发人员要注意的,就是在代码中时刻牢记不要无谓的使用和浪费内存。:)

如果你有一台大内存的服务器,同时对Win32操作系统中对于进程最高使用2G内存的限制很郁闷,可选的解决方法有两个:
1、使用/3GB模式启动计算机,方法参加文后的链接
2、使用Windows Server 2003 64bits Edition

转载于:https://www.cnblogs.com/dynasty/archive/2006/01/06/312666.html

相关文章:

  • jquery.min.map 404 (Not Found)出错的原因及解决办法
  • 字符压缩题目
  • Monad B3 is Released!!
  • 通过内推来应聘职位,你的体验是怎样的?
  • 关注朱令--十年前铊中毒的女孩(本文转自http://www8.tianya.cn)
  • ASP.NET程序中常用代码汇总(五)
  • POJ 2154 Color [Polya 数论]
  • 今天也申请了一个博克, 打算好好整理一下
  • HTML5 本地数据库SQLLite
  • ISAPI Filter实现的防盗链程序终于完工
  • 待继续博文
  • C语言 · 运用结构体的排序方法
  • 实用代码(Javascript脚本)
  • 前端学PHP之日期与时间
  • 人生理想
  • centos安装java运行环境jdk+tomcat
  • JavaScript的使用你知道几种?(上)
  • js 实现textarea输入字数提示
  • js递归,无限分级树形折叠菜单
  • overflow: hidden IE7无效
  • Vue 2.3、2.4 知识点小结
  • Vue全家桶实现一个Web App
  • 闭包--闭包作用之保存(一)
  • 深度学习中的信息论知识详解
  • 使用putty远程连接linux
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 终端用户监控:真实用户监控还是模拟监控?
  • elasticsearch-head插件安装
  • 湖北分布式智能数据采集方法有哪些?
  • 移动端高清、多屏适配方案
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • #define用法
  • #if和#ifdef区别
  • (145)光线追踪距离场柔和阴影
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)人的集合论——移山之道
  • (转)四层和七层负载均衡的区别
  • (转)详解PHP处理密码的几种方式
  • ./configure,make,make install的作用
  • .NET CORE Aws S3 使用
  • .Net Web窗口页属性
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .net流程开发平台的一些难点(1)
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @test注解_Spring 自定义注解你了解过吗?
  • @vue/cli 3.x+引入jQuery
  • @软考考生,这份软考高分攻略你须知道
  • [BZOJ 1040] 骑士