随笔分类 - CLR/Debugging
摘要:前面说了,Rx可以在3.5里用,他带给了3.5可以使用的支持并发的集合类型,说白了,就是提供了Thread-Safe的Collection。 在.NET 4.0之前,是不直接支持线程安全的集合的。除非自己去做lock。而Lock带给我们的除了风险之外,系统的性能下降问题特别明显。在我之前的项目中,需要用到一个Thread-safe的Queue,我当时使用Compare-And-Swap方式实现的。但是这种方式并不能保证高效,个人能力有限,Google也没帮上多大忙。所以.net 4.0一出来的时候,宣布支持ConcurrentQueue<T>,我立刻就抄起Reflector去看看它
阅读全文
摘要:两种GC,做web的需要哪种?经常看到一些asp.net的项目没有根据生产环境选用合适的GC,我甚至都亲眼见过asp.net使用gcConcurency设置为true的场景! 另外,微软的官方说法是more than 2 cpus的时候才建议开启server GC, 这也不能一棒子打死,还得灵活选择. 这里放一篇去年9月我写的一篇发表在程序员上的关于gc的文章, 在引一篇GC的权威Maoni的一...
阅读全文
摘要:在上一篇介绍该特性的文章里, 大家都在说这是vb里已经有的东西. 切不管c#的发展方向, 我们剖析一下这个特性的实现原理: 首先,还是看一个例子: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 class Program 2 { 3...
阅读全文
摘要:看了几篇PDC上关于CLR4.0的文章,微软确实要将诊断和debug技术推向大众了。包括了visual studio对mini dump的支持等,不过目前似乎还只是个初步阶段,更多内容在这里可以看到: http://blogs.msdn.com/rmbyers/archive/2008/10/26/clr-4-0-advancements-in-diagnostics.aspx
阅读全文
摘要:这个特性比较简单,依旧长话多说,只说重点。下面这个demo我们经常使用重载函数来处理问题的场景: Code Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 public void Process(int p1, float p2, string ...
阅读全文
摘要:我们分析一下用Reflector看到的东西: Code Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1private static void Main(string[] args) 2{ 3 object foo1 = new Foo(...
阅读全文
摘要:废话不多说,直接开始。先看程序: Code 1class Program 2{ 3 static void Main(string[] args) 4 { 5 dynamic foo1 = new Foo(); 6 foo1.Do1(); 7 foo1.Do2(); 8 foo1.KissFanweixiao(); 9 } 10} 11 12public clas...
阅读全文
摘要:有时为了分析抓dump等原因在生产服务器上安装了DebugDiag,但是他会自动安装一个叫做Debug Diagnostic Service的服务,该服务默认为自动启动,显示为一个dbgsvc.exe进程,在TaskList里可以看到该进程会消耗大量的I/O, 原因是这个服务会不定期的抓一些dump等操作。所以千万要注意在生产服务器上安装DebugDiag后一定要设置该服务为手工启动方式。
阅读全文
摘要:前段时间项目遇到一些问题,抓了一个dump后拿回家里的机器上分析。按着方法一步一步走,走到!clrstack的时候,问题出现了——看不到托管环境下的method name。我觉得这这!clrstack看不到method name可真没什么作用了。随后请教了几个朋友,都说没碰到过着情况。 第二天去了公司先打开windbg,open这个dump,载入sos后先来一个~*e!clrstack。邪门,me...
阅读全文
摘要:如果遇到了性能问题,在使用debug之前分析问题较为不错的一个工具就是perfmon.解决问题最好的方法是思考,这也是熊力大哥在其书中一直在强调的. 如果您的网站遇到下面的几种情形,那还是先看看perfmon里GC相关的东西吧: cpu占用高,内存占用不高. cpu和内存占用都比较高 cpu和内存占用都不高,但是网站响应很慢 打开perfmon找到.NET CLR Memory后下面有好几个co...
阅读全文
摘要:AssemblyName aName = new AssemblyName("DynamicAssemblyExample"); AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly( aName, AssemblyBu...
阅读全文
摘要:0:000> !dumpheap -thinlock ------------------------------ Heap 0 Address MT Size 02d07a80 7a7aac2c 28 ThinLock owner 13 (1c5124d0) Recursive 0 02d279d0 02b88b54 116 Thin...
阅读全文
摘要:!dumpobject应该是通常用的最多的,每次遇到System.Xml.XmlDocument的时候就很头疼了.DumpXmlDocument这个命令非常实用,也很简单,看图说话:
阅读全文
摘要:你肯定有很多次只是想去看一下堆(heaps)和代(generations)的大小.对于heaps,你可以使用!eeheap -gc来检查大小,但是输出的信息很多,同时还有许多其他的东西,所以要找到我们想要的数据还是比较麻烦的. 现在好了,即将发布的新版本的!heapstat可以打印出被不同的代(generations)所分割(break down)的堆(heap)的大小了,当然啊,还包括大对象堆(...
阅读全文
摘要:在不用windbg解决High CPU的一个案例中,列举了exception过多而导致high cpu的情况,但是在后期用windbg分析dump的时候,遇到了一个问题:我看到了很多exceptions,但是就是不能!gcroot。猜想了一下原因,看了tom的blog,证实了我的分析。(这家伙是我遇到回邮件最准时的,如果有问题mail请教他,每天早上8点开机不一会必定有他的answer) 举例:用...
阅读全文
摘要:场景:一个400-700 requests /sec的web app再一次较大改版后遇到了high cpu的问题,当负载攀高时系统相应开始变慢。 基础:本文着重在于讲述分析问题的过程。lixiong写的windows用户态程序高效排错一书从一开始就在讲述一个道理:找到问题的关键不在使用windbg的过程,而在于对问题的分析。 首先,这是一个用于web聊天和消息投递的web应用程序,所以一般情况下不...
阅读全文
摘要:1.ADPlus是可以通过-notify开关来使用windows messenger服务通知这个crash的,需要注意的是只能是在-crash下。当debugger因为一个second chance exception从process上detach,或者按下ctrl+c停止debug的时候,就会触发这个操作。 2.ADPlus支持xcopy部署,也就是说可以把ADPlus所在的目录copy到任何一...
阅读全文
摘要:通过! FinalizeQueue检查是否有大量的SqlConnection对象等待被Finalize. 通常Finalize queue中的Connection应该为0,或者小于10。当数量超过30的时候,通常说明代码中有使用完SqlConnection后忘记及时调用Close或者Dispose的情况。 通过!dumpheap –stat检查内存中是否有大量的DataTable...
阅读全文
摘要:既是是read-only的Property,使用Array类型时,也会对其做一个write-protected的,因此访问这个array类型的property的时候,其实我们访问到的是它的一个copy.在某些情况下就可能会在一定程度上影响整体性能.
阅读全文