深圳.net培训
达内深圳罗湖中心

138-2888-3675

热门课程

深圳.NET培训:.Net 内存对象分析

  • 时间:2017-10-27
  • 发布:深圳.NET培训
  • 来源:达内新闻

深圳.NET培训告诉你.Net 内存对象分析,深圳.NET培训(sz.net.tedu.cn)专家就针对.Net 内存对象分析这一问题做一个详细的分解。希望能在工作中对你有所帮助!

 在生产情况中,经由过程运转日记咱们会发明一些非常成绩,此时,咱们不克不及直接拿VS远程到办事器上调试,同时日记输入的信息无法百分百反映内存中对象的状况,比如说咱们想检查过程中所有的Socket衔接状况、办事路由信息等等。

即:若何阐发.Net 运转时内存对象?

因此,本日咱们推荐.Net进阶必备神器:Windbg,基于Windbg阐发内存中对象的状况。

还因此现实场景为例吧,如许能够加倍贴合现实利用,同时更有自创意义。

营业场景:分布式情况下,各个办事容器过程中缓存了各个办事的Socket衔接信息,方便运转时办事间相互访问。但是收集是偶然要发抖的,在发抖的一瞬间,许多Socket衔接便中止了,办事挪用方收到的非常信息就是:衔接已中止等。

若何疾速定位到哪些Socket衔接是中止的?这些中止的Socket衔接是衔接的哪些办事器、端口?这些信息能够赞助咱们阐发详细的收集成绩,同时做一些法式上的赔偿:衔接重修。一个目的,坚持法式的高可用性!

那末,请出咱们本日的配角:Windbg,微软的民间先容:

http://windbg.org/

进一步说,咱们必要抓取指定过程某一瞬间的内存镜像,而后利用Windbg阐发内存中各类对象、线程、线程池、析构队列、堆、CPU内核时间片等的状况。

因此,第一步,咱们必要对要进行内存阐发的过程,抓取一个Full Dump文件:内存镜像文件。

任务管理器->抉择过程->创建转储文件

系统会将Dump文件存储在指定的目次,这个目次必要拷贝一下,以备用。

第二步,从下面路径下载并安装Windbg:

https://developer.microsoft.com/en-us/windows/hardware/download-windbg

请根据操纵系统的位数,抉择X86或者X64。这里咱们用的64位操纵系统,抉择的Windbg(X64)

第三步:Ctrl+D,关上适才抓取的Dump文件

第四步:加载调试用的SOS.dll: .loadby sos clr

.loadby sos clr

第五步:检查内存中指定范例的对象

!dumpheap -Type Socket

这里的Socket是详细的范例,咱们要检查Socket衔接状况,因此范例是Socket

这里的Header中MT=Method Table

咱们必要用的MT:00007ffafe50d700

第六步,检查内存所有所有的Socket对象的地点:

!dumpheap -mt 00007ffafe50d700

输入成果中,第一列是某一个Socket对象的内存地点

此时,咱们能够利用下面的敕令,随机检查一个Socket对象的信息:

!do 000001b2d188ae00

!do 的意思:!dumpObj

那末成绩来了,几百个Socket对象,假如一个一个!do检查,这工作量太大了! 固然不克不及这么干,Windbg有.foreach敕令

搜刮Debugging help.chm文档,.foreach给了个样例:

.foreach /f ( place "g:\myfile.txt") { dds place }

即,循坏遍历一个文本文件,对每一行数据,履行一个敕令操纵。

好,咱们回到咱们上一步的输入中:每一个Socket对象的地点列表,咱们拷贝进去,用文本编辑对象只掏出第一列(Socket地点列),保留成1.txt

第七步:循坏遍历检查每一个内存对象

.foreach /f (adr "C:\1.txt") {!do adr}

输入:

将所有的输入,拷贝到文本编辑器中,搜刮查问指定的属性,比方m_IsConnected=0, 便可找出衔接断开的Socket对象,而后进一步用!gcroot 检查这个对象的援用干系,再一步一步看各个援用对象的信息就能够大抵阐发了。

想知道更多关于IT行业的信息吗?想远远不如行动,行动起来,一起加入达内,一起进入IT行业,跟着达内的脚步,一起走进如今的互联网信息时代,带给你不一样的色彩生活——【深圳.NET培训

更多文章:
1、深圳.net培训班:.NET 新标准介绍(干货)
2、深圳.net培训:.NET 和 Docker结合使用
3、深圳.net培训机构:高效实用的.NET开源项目

上一篇:深圳.NET培训:学习.NET最适合做什么?
下一篇:深圳.NET培训:程序员的XML10道面试题

深圳.NET培训:.Net 内存对象分析

深圳.NET培训:学习.NET最适合做什么?

深圳.NET培训:.NET 的性能怎么样?

什么是重构?

选择城市和中心
贵州省

广西省

海南省