========下面的一堆文字为了说明一件事情---.NET程序,内存溢出,如何控制.飞秋2010下载官网主要是堆HEAP大小如何控制以及优化.以减轻GC突发性负担及这个时候服务器当机的可能*.
对于大型程序,完全依赖GC是不现实的,飞秋2010下载官网对于高负载服务器,往往我们80%的堆都由自己的析构函数接管,并辅助以自行设计的bufferpool接管堆释放工作以达到HEAP可控的目的,减少CPU突发性负荷(CPU尖峰).虽然不像C那样可以控制的那么完全,但是多多少少对OOM的发生起到抑制作用,深入下去可以完全避免OOM......好了IF性能和内存开销没什么追求的 THEN 就不必看了飞秋2010下载官网,,,,

ELSE

飞秋2010下载官网

GO

=====================
1.下个windbg,去baidu google一下即可.飞秋2010下载官网[www.freeeim.com]
2.sos.dll 这个框架自带,只所以提下,是让大家有搜索的关键字用.
3.泄露,对于.net程序,主要是堆泄露,对于大型服务器程序,需要严格排查OOM(内存泄露)的问题,节约服务器GC开销,内存开销,cpu开销,提高支撑
4.配置环境变量 添加系统变量 _NT_DEBUGGER_EXTENSION_PATH   C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727  这个是为了能够找到sos.dll
5.实战
飞秋2010下载官网启动windbg,开启调试窗口,加载用于.NET调试所使用的sos.dll
.load sos
回车之后无任何显示表示无任何错误,这个时候就可以运行调试命令了.
需要说明的是.打头的是windbg自带命令,!打头的命令是sos.dll调试命令.

显示GC堆占用情况命令  !dumpheap -stat
大概会显示这些:对象表,对象数量,每个对象内存占用情况...等,如下:
---------------------
0:000> !dumpheap -stat
Statistics:
MT             Count       TotalSize Class Name
7a787cc4           1              12 System.IO.FileSystemWatcher+FSWAsyncResult
7a75904c           1              12 System.Diagnostics.OrdinalCaseInsensitiveComparer
7a7575cc           1              12 System.CodeDom.Compiler.CodeDomConfigurationHandler
7a7571a8           1              12 System.Net.DefaultCertPolicy
7a75661c           1              12 System.Diagnostics.TraceListenerCollection
7a755834           1              12 System.Diagnostics.PerformanceCounterCategoryType
..................
68a66a88     227,559      12,743,304 System.Web.UI.WebControls.Literal
68a2f7fc     399,272      14,373,792 System.Web.UI.ControlCollection
68a92e2c     768,731      33,824,164 System.Web.UI.Control+OccasionalFields
68a884a0     641,952      38,517,120 System.Web.UI.LiteralControl
79124228     879,515      43,394,976 System.Object[]
790fa3e0   1,431,594     122,806,484 System.String

Total 10,389,625 objects, Total size: 463,313,540
----------------------

1,431,594 个 System.String对象 占用 122 MBytes

下面的一堆文字为了说明一件事情---.NET程序,内存溢出,如何控制.
使用!dumpobj 可以查看System.String对象构成情况

0:000> !dumpheap -type System.Web.UI.LiteralControl
 Address       MT Size Gen
023ea0a8 68a884a0   60   2 System.Web.UI.LiteralControl
023ea0e4 68a884a0   60   2 System.Web.UI.LiteralControl
023ea374 68a884a0   60   2 System.Web.UI.LiteralControl
023ea460 68a884a0   60   2 System.Web.UI.LiteralControl
023ea510 68a884a0   60   2 System.Web.UI.LiteralControl
023eab3c 68a884a0   60   2 System.Web.UI.LiteralControl
........CONTINUED........
023fe31c 68a884a0   60   2 System.Web.UI.LiteralControl
023fe414 68a884a0   60   2 System.Web.UI.LiteralControl
023fe4c4 68a884a0   60   2 System.Web.UI.LiteralControl
023fe500 68a884a0   60   2 System.Web.UI.LiteralControl

哦 基本上都是LiteralControl

随便抓个控件的地址来分析!do命令

0:000> !do 023ea0a8
Name: System.Web.UI.LiteralControl
MethodTable: 68a884a0
EEClass: 68a88428
Size: 60(0x3c) bytes
GC Generation: 2
(C:/WINDOWS/assembly/GAC_32/System.Web/2.0.0.0__b03f5f7f11d50a3a/System.Web.dll)
Fields:
      MT    Field Offset                   Type   VT     Attr    Value Name
790fa3e0  4001fe0      4          System.String    0 instance 00000000 _id
790fa3e0  4001fe1      8          System.String    0 instance 00000000 _cachedUniqueID
68a2af44  4001fe2      c   ...em.Web.UI.Control    0 instance 023e8864 _parent
68a91070  4001fe3     2c           System.Int32    0 instance        0 _controlState
68a85ea0  4001fe4     10   ...m.Web.UI.StateBag    0 instance 00000000 _viewState
68a2af44  4001fe5     14   ...em.Web.UI.Control    0 instance 023e8864 _namingContainer
68a273d0  4001fe6     18     System.Web.UI.Page    0 instance 01df4514 _page
68a92e2c  4001fe7     1c   ...+OccasionalFields    0 instance 00000000 _occasionalFields
68a2b378  4001fe8     20   ...I.TemplateControl    0 instance 00000000 _templateControl
68a14528  4001fe9     24   ...m.Web.VirtualPath    0 instance 00000000 _templateSourceVirtualDirectory
68a8bb48  4001fea     28   ...rs.ControlAdapter    0 instance 00000000 _adapter
68a3a8f8  4001feb     30   ...SimpleBitVector32    1 instance 023ea0d8 flags
790f9c18  4001fda    c70          System.Object    0   shared   static EventDataBinding
>> Domain:Value 000f0d00:NotInit 0011a720:01df0028 <<
790f9c18  4001fdb    c74          System.Object    0   shared   static EventInit
>> Domain:Value 000f0d00:NotInit 0011a720:01df0034 <<
790f9c18  4001fdc    c78          System.Object    0   shared   static EventLoad
>> Domain:Value 000f0d00:NotInit 0011a720:01df0040 <<
790f9c18  4001fdd    c7c          System.Object    0   shared   static EventUnload
>> Domain:Value 000f0d00:NotInit 0011a720:01df004c <<
790f9c18  4001fde    c80          System.Object    0   shared   static EventPreRender
>> Domain:Value 000f0d00:NotInit 0011a720:01df0058 <<
790f9c18  4001fdf    c84          System.Object    0   shared   static EventDisposed
>> Domain:Value 000f0d00:NotInit 0011a720:01df0064 <<
79124228  4001fec    c88        System.Object[]    0   shared   static automaticIDs
>> Domain:Value 000f0d00:NotInit 0011a720:01df0070 <<
790fa3e0  4002211     34          System.String    0 instance 02238664 _text

这里如果发现某个值过大,就可以继续深入使用!do + 地址 来进入查看,以便找到OOM的根源..试试

0:000> !do 02238664
Name: System.String
MethodTable: 790fa3e0
EEClass: 790fa340
Size: 158(0x9e) bytes
GC Generation: 2
(C:/WINDOWS/assembly/GAC_32/mscorlib/2.0.0.0__b77a5c561934e089/mscorlib.dll)
String:      
Fields:
MT Field Offset Type VT Attr Value Name
790fed1c 4000096 4 System.Int32 0 instance 71 m_arrayLength
790fed1c 4000097 8 System.Int32 0 instance 70 m_stringLength
790fbefc 4000098 c System.Char 0 instance 3c m_firstChar
790fa3e0 4000099 10 System.String 0 shared static Empty
>> Domain:Value 000f0d00:790d6584 0011a720:790d6584 <<
79124670 400009a 14 System.Char[] 0 shared static WhitespaceChars
>> Domain:Value 000f0d00:01d413b8 0011a720:01d44f80 <<

可以看到32位地址为02238664的是用于表格的结束标志存储.

使用!objsize进一步命令查看对象内的的对象构成,精确到class名,自己可以试试了...还有很多命令可以查看Gen的回收情况,对于长时间未释放的unmanaged资源也可以列表出来,这个时候可以do进去,查看内部结构,找到属于哪段代码之后,再返回自己的.cs代码进行逻辑调整....这样的话,性能就很可观了.同时可以尽量使用好CPU,而不必让不必要的CPU时间牺牲框架和底层的代码胶合层上面..永远要记住CPU时间是用户的,不是你的!这样,对内存了解的多一些,你的程序就能跑的更快一点,持久运行的时间就更长一些...

通常,asp.net或者socket服务器运行的时候,对内存的要求是比较高的,如果内存的性能我们不能去把握,真的很难再生产环境中超越LAMP体系架构.
我的观点是,内存---能节约,尽量节约吧,能高效利用,尽量高效利用!所以写这篇帖子,非常非常肤浅的介绍了下,前后也就写了20分钟,因为要睡觉了...

下面的一堆文字为了说明一件事情---.NET程序,内存溢出,如何控制.相关推荐

  1. java clob内存溢出_java - java.sql.SQLException:ORA-01704:字符串文字太长时插入或更新 - 堆栈内存溢出...

    通常,当我插入4000个字符限制时,它的工作正常,但当超过4000个字符时,它抛出SQL异常字符串文字太长,即使我的DISCHARGE_TEXT数据类型是CLOB 我的JavaScript代码是 fu ...

  2. java字符串转语音文件_java - Java文字转语音(Spring Boot) - 堆栈内存溢出

    我从事的项目是必须使用SpringBoot生成验证码. 我想要一个"文本到语音"功能,并且声音文件必须使用SpringBoot生成(否则这将是一个巨大的安全问题). 我生成了一个验 ...

  3. 2019年我建议你做好三件事情

    在公司搞几次技术讲座 做技术讲座好处很多,比如: 1. Teach others是最有效的学习方式,能够逼迫你把一个技术的方方面面都了解清楚,价值巨大. 2. 建立你的个人技术影响力. 从小组到部门, ...

  4. Windows Phone 8.1 新特性 - 控件之应用程序栏

    原文:Windows Phone 8.1 新特性 - 控件之应用程序栏 2014年4月3日的微软Build 2014 大会上,Windows Phone 8.1 正式发布.相较于Windows Pho ...

  5. 人生短暂,持之以恒地做一件事情就会成功

    地址: http://blog.csdn.net/boyupeng/article/details/6213134 坚持.长期地坚持去做一件事情,真的很难.不过,当你下定决心持续地去做一件事情的时候, ...

  6. 即使不跳槽,你也应该做的三件事情

    每年的年初是各个行业跳槽最为频繁的季节,仿佛冬眠结束的动物们开始出来觅食.这例子并不恰当,因为不跳槽不意味着不需要觅食生存,不跳槽也依然需要在你一直以来坚守的岗位上继续地奋斗和付出.无论你是否有跳槽的 ...

  7. 人生短暂,持之以恒地做一件事情就会成功(每当烦躁心急如焚的时候就读读这篇文章吧)

    坚持.长期地坚持去做一件事情,真的很难.不过,当你下定决心持续地去做一件事情的时候,你的坚持就会变成一种习惯.习惯一旦养成,你不去做那件事情的时候,反而会觉得心里不舒服,好像少了什么似的.因为平时要上 ...

  8. 系统在此应用程序堆栈溢出_部署第一个完整堆栈应用程序之前需要考虑的三件事

    系统在此应用程序堆栈溢出 Building a full stack app is no small endeavor, and deploying it comes with its own hos ...

  9. 聊聊今天身边的几件事情

    这是学习笔记的第 1838篇文章 今天是冬至 今天是冬至,可能很多朋友都吃过饺子了,有的习俗是吃汤圆之类的. 我们家乡那边在冬至的那天是吃麻食,不过现在已经找不到那种感觉了,就随了主流开始吃饺子. 小 ...

最新文章

  1. WinCE 和Win Mobile的关系
  2. 99. 恢复二叉搜索树
  3. 信号公式汇总之傅里叶变换
  4. 22 FI配置-财务会计-定义收益留存科目(Retained Earning Account)
  5. hihoCoder1690 (动态规划)
  6. 远程mysql用ssh连接_使用SSH密钥连接到远程MySQL服务器
  7. 可以进行单元测试么_大量实例助攻,让你的单元测试更高效
  8. Jumpserver代码规范
  9. QT4升级QT5调研报告
  10. Java开发不得不会!java私塾初级模拟银源代码
  11. SQL Server修改表结构时,不允许保存更改,阻止保存要求重新创建表的更改
  12. office2010 错误1706 解决办法
  13. 记一次失败的阿里巴巴电话面试
  14. [ecshop 二次开发经验] ecshop 手机版本 购车流程 最后没有支付按钮 ,清理没有用的支付方式 68ecshop
  15. 基于MES的生产车间管理信息系统
  16. linux环境下添加定时任务,linux下添加定时任务。
  17. 全球最大多物种水族馆将于5月23日向公众开放,容纳68000多只海洋动物 | 美通社头条...
  18. 字模c语言,[C/C++]字模的解析(视频)
  19. 正则表达式入门级别详细教程
  20. IntelliJ打开浏览器的快捷键

热门文章

  1. oracle的标准写法,oracle 表连接特有写法与标准写法
  2. CentOS7 如何关闭防火墙
  3. 麦肯锡方法中的经验(读书摘要)
  4. 互联网日报 | 天猫双11成交额4982亿;京东双11下单金额2715亿;百度成立短视频业务部...
  5. wireshark网卡权限_设置网卡属性用wireshark抓VLAN包
  6. 作者:周大铭,管理科学与工程博士,工业和信息化部赛迪研究院软件所助理研究员。...
  7. 【项目管理】敏捷和Scrum
  8. 管理软件实施(3)——项目的生命周期
  9. 一切从零开始外挂教程(翻录)
  10. WordPress 5.1:从CSRF到RCE