﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-LiXiong's Debugging paper</title><link>http://www.cnblogs.com/lixiong/</link><description>《Windows用户态程序高效排错》</description><language>zh-cn</language><lastBuildDate>Fri, 29 Aug 2008 20:19:56 GMT</lastBuildDate><pubDate>Fri, 29 Aug 2008 20:19:56 GMT</pubDate><ttl>60</ttl><item><title>招聘职位：赴微软软件测试开发工程师(产品: Windows 7)</title><link>http://www.cnblogs.com/lixiong/archive/2008/07/18/1246420.html</link><dc:creator>lixiong</dc:creator><author>lixiong</author><pubDate>Fri, 18 Jul 2008 14:45:00 GMT</pubDate><guid>http://www.cnblogs.com/lixiong/archive/2008/07/18/1246420.html</guid><wfw:comment>http://www.cnblogs.com/lixiong/comments/1246420.html</wfw:comment><comments>http://www.cnblogs.com/lixiong/archive/2008/07/18/1246420.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/lixiong/comments/commentRss/1246420.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lixiong/services/trackbacks/1246420.html</trackback:ping><description><![CDATA[摘要: 目前我们在开发和测试Win7下面的活动目录管理工具，用WPF写的。测试方面的三大重要任务:

1. 因为我们的产品是跟在Win7里面的，所以编译，发布流程是跟着Windows的走。换句话说，每次测试新版本都需要重新装刚刚编译出来的Windows 7。其次，活动目录不是一个机器就可以了，要搭建多个服务器节点(DC)。所以如何高效自动地完成测试环境的搭建是很有挑战的
2. 完成WPF程序的自动化测试。简单地说，就是要通过代码去模拟用户的UI操作。比如点鼠标，输入数据，点确定按钮等等。大家排排脑袋想下这个事情的难度。比如给你一个WPF写的计算器，你知道怎么做么？如何写出高效，稳定和全面的UI自动化也是很有挑战的
3. 熟悉活动目录。熟悉活动目录的就知道这个东西有多复杂。当然不熟悉的也没关系，不能指望一个人什么都知道

我们招人的目的就是做好上面三点工作。技术方面的话，能搞定C#和Windows就可以了。搞定的意思是指能搞定技术细节，比如:
......&nbsp;&nbsp;<a href='http://www.cnblogs.com/lixiong/archive/2008/07/18/1246420.html'>阅读全文</a><img src ="http://www.cnblogs.com/lixiong/aggbug/1246420.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41960/" target="_blank">[新闻]微软4.86亿美元收购Greenfield</a>]]></description></item><item><title>《Windows 高效排错》 可以在CSDN读书频道预览了</title><link>http://www.cnblogs.com/lixiong/archive/2007/11/07/952643.html</link><dc:creator>lixiong</dc:creator><author>lixiong</author><pubDate>Wed, 07 Nov 2007 13:57:00 GMT</pubDate><guid>http://www.cnblogs.com/lixiong/archive/2007/11/07/952643.html</guid><wfw:comment>http://www.cnblogs.com/lixiong/comments/952643.html</wfw:comment><comments>http://www.cnblogs.com/lixiong/archive/2007/11/07/952643.html#Feedback</comments><slash:comments>33</slash:comments><wfw:commentRss>http://www.cnblogs.com/lixiong/comments/commentRss/952643.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lixiong/services/trackbacks/952643.html</trackback:ping><description><![CDATA[<p>《Windows 高效排错》 可以在CSDN读书频道预览了</p>
<p>地址在这里:<br />
<a href="http://book.csdn.net/bookfiles/555/">http://book.csdn.net/bookfiles/555/</a></p>
<p>读书频道的排版有些问题，看起来不是很舒服。如果想看PDF的，可以在这里下载</p>
<p><a href="http://www.cnblogs.com/lixiong/archive/2006/08/16/475520.html">http://www.cnblogs.com/lixiong/archive/2006/08/16/475520.html</a></p>
<p>纸板书籍估计在11月中下旬面世&nbsp;</p>
<p>现在在China-pub, dearbook等网上书店已经有介绍，地址分别</p>
<p><a href="http://www.china-pub.com/computers/common/info.asp?id=37008">http://www.china-pub.com/computers/common/info.asp?id=37008</a><br />
<a href="http://www.dearbook.com.cn/book/230727">http://www.dearbook.com.cn/book/230727</a></p>
<p>您的看法非常重要。<font color="#ff0000">如果你看过这本书的PDF，了解本书的内容和潜在读者，<strong>请您在上面的链接中留下你的观点</strong>，便于其它不了解这本书的人选择。</font></p>
<p><strong>Dudu</strong>,&nbsp;书中有关于cnblogs性能优化的案例，<strong>Jeffery Zhao</strong>，补充链接中有WCF Assembly Loading的案例。非常希望听到你们两位的评价。<br />
<br />
如果您通过这本书介绍的方法解决过实际的问题，非常希望您能够分享您的经验。您可以发邮件到<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#101;&#112;&#97;&#114;&#103;&#64;&#109;&#115;&#110;&#46;&#99;&#111;&#109;">eparg@msn.com</a>。如果您的分享能够帮助其它读者，我非常希望能够送书给您作为答谢。</p>
<p>如果您对书中所述内容有疑惑，也欢迎您写信来讨论。我会尽快回复。如果我们之间的讨论对其他读者有帮助，我也会放到网上，同时送书给您作为答谢。</p>
<img src ="http://www.cnblogs.com/lixiong/aggbug/952643.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41959/" target="_blank">[新闻]苹果已然取代微软地位成行业众矢之的</a>]]></description></item><item><title>三个关键命令找出ASP.NET程序内存分片的原因</title><link>http://www.cnblogs.com/lixiong/archive/2007/10/26/938430.html</link><dc:creator>lixiong</dc:creator><author>lixiong</author><pubDate>Fri, 26 Oct 2007 03:20:00 GMT</pubDate><guid>http://www.cnblogs.com/lixiong/archive/2007/10/26/938430.html</guid><wfw:comment>http://www.cnblogs.com/lixiong/comments/938430.html</wfw:comment><comments>http://www.cnblogs.com/lixiong/archive/2007/10/26/938430.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cnblogs.com/lixiong/comments/commentRss/938430.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lixiong/services/trackbacks/938430.html</trackback:ping><description><![CDATA[<p>最近一位朋友的ASP.NET程序怀疑有内存泄露问题。几个简单的页面，起来运行几分钟后，虚拟内存就到600多MB。从性能监视上看，private bytes只有200多MB。</p>
<p>这样的问题从经验上来说，十有八九都是内存碎片了。ASP.NET程序发生内存碎片的原因比较多，我常见的有:</p>
<p><br />
1.&nbsp;Web.config中的debug=true，导致batch compilation=false,使得每一个ASPX页面都生成一个临时assembly。当页面比较多的时候，大量的assembly导致内存泄露。<br />
2.&nbsp;程序中误用了XmlSerializer。频繁的XML序列化导致大量的动态assembly<br />
3.&nbsp;程序中有大量的blocking IO操作，而且IO buffer没有及时释放。比如程序中有大量的Web Service调用，但是对方web service返回比较慢，使得调用程序中用来接收web service结果的小块buffer大量堆积，导致内存泄露</p>
<p>下面是我拿到dump后的分析步骤。对于managed程序，找出问题的大致线索还是挺简单的。</p>
<p><br />
(随便无耻地推销下，《Windows高效排错》书中对这样的问题有更多的讨论。包括更多的案例和命令解释。该书最初的PDF草稿在<a href="http://www.cnblogs.com/lixiong/archive/2006/08/16/475520.html">http://www.cnblogs.com/lixiong/archive/2006/08/16/475520.html</a>。如果有朋友从这个PDF中找到过排错的灵感，麻烦也帮忙无耻推销下。)</p>
<p><br />
首先是看看CLR的版本了。这个直接看mscorwks文件或者mscorsrv文件。如果文件版本比较低，后面的就没必要仔细看了，升级CLR补丁后再说。</p>
<p><br />
0:000&gt; lmvm mscorwks<br />
start&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; module name<br />
79e70000 7a3d6000&nbsp;&nbsp; mscorwks&nbsp;&nbsp; (deferred)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; Image path: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll<br />
&nbsp;&nbsp;&nbsp; Image name: mscorwks.dll<br />
&nbsp;&nbsp;&nbsp; Timestamp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Fri Apr 13 15:15:54 2007 (461F2E2A)<br />
&nbsp;&nbsp;&nbsp; CheckSum:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00564CA8<br />
&nbsp;&nbsp;&nbsp; ImageSize:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00566000<br />
&nbsp;&nbsp;&nbsp; File version:&nbsp;&nbsp;&nbsp;&nbsp; 2.0.50727.832<br />
&nbsp;&nbsp;&nbsp; Product version:&nbsp; 2.0.50727.832<br />
&nbsp;&nbsp;&nbsp; File flags:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 (Mask 3F)<br />
&nbsp;&nbsp;&nbsp; File OS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4 Unknown Win32<br />
&nbsp;&nbsp;&nbsp; File type:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.0 Dll<br />
&nbsp;&nbsp;&nbsp; File date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00000000.00000000<br />
&nbsp;&nbsp;&nbsp; Translations:&nbsp;&nbsp;&nbsp;&nbsp; 0409.04b0<br />
&nbsp;&nbsp;&nbsp; CompanyName:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Microsoft Corporation<br />
&nbsp;&nbsp;&nbsp; ProductName:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Microsoft&#174; .NET Framework<br />
&nbsp;&nbsp;&nbsp; InternalName:&nbsp;&nbsp;&nbsp;&nbsp; mscorwks.dll<br />
&nbsp;&nbsp;&nbsp; OriginalFilename: mscorwks.dll<br />
<font color="#ff0000">&nbsp;&nbsp;&nbsp; ProductVersion:&nbsp;&nbsp; 2.0.50727.832<br />
&nbsp;&nbsp;&nbsp; FileVersion:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.0.50727.832 (QFE.050727-8300)</font><br />
&nbsp;&nbsp;&nbsp; FileDescription:&nbsp; Microsoft .NET Runtime Common Language Runtime - WorkStation<br />
&nbsp;&nbsp;&nbsp; LegalCopyright:&nbsp;&nbsp; &#169; Microsoft Corporation.&nbsp; All rights reserved.<br />
&nbsp;&nbsp;&nbsp; Comments:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flavor=Retail</p>
<p>恩，版本还是比较新的。既然是内存问题，先看GC中有多少object，占用了多少内存</p>
<p>0:000&gt; !eeheap -gc<br />
Number of GC Heaps: 4<br />
------------------------------<br />
Heap 0 (000f3f10)<br />
generation 0 starts at 0x02fad2fc<br />
generation 1 starts at 0x02f83ff8<br />
generation 2 starts at 0x02f00038<br />
ephemeral segment allocation context: none<br />
&nbsp;segment&nbsp;&nbsp;&nbsp; begin allocated&nbsp;&nbsp;&nbsp;&nbsp; size<br />
00109198 7a72c42c&nbsp; 7a74d308 0x00020edc(134876)<br />
000fdfb0 790d5588&nbsp; 790f4b38 0x0001f5b0(128432)<br />
02f00000 02f00038&nbsp; 03081450 0x00181418(1578008)<br />
Large object heap starts at 0x12f00038<br />
&nbsp;segment&nbsp;&nbsp;&nbsp; begin allocated&nbsp;&nbsp;&nbsp;&nbsp; size<br />
12f00000 12f00038&nbsp; 131b00a0 0x002b0068(2818152)<br />
Heap Size&nbsp; 0x47190c(4659468)<br />
------------------------------<br />
Heap 1 (000f50a0)<br />
generation 0 starts at 0x06f5b110<br />
generation 1 starts at 0x06f5acf8<br />
generation 2 starts at 0x06f00038<br />
ephemeral segment allocation context: none<br />
&nbsp;segment&nbsp;&nbsp;&nbsp; begin allocated&nbsp;&nbsp;&nbsp;&nbsp; size<br />
06f00000 06f00038&nbsp; 06ff511c 0x000f50e4(1003748)<br />
Large object heap starts at 0x14f00038<br />
&nbsp;segment&nbsp;&nbsp;&nbsp; begin allocated&nbsp;&nbsp;&nbsp;&nbsp; size<br />
14f00000 14f00038&nbsp; 14f00048 0x00000010(16)<br />
Heap Size&nbsp;&nbsp; 0xf50f4(1003764)<br />
------------------------------<br />
Heap 2 (000f68a0)<br />
generation 0 starts at 0x0af78634<br />
generation 1 starts at 0x0af09d40<br />
generation 2 starts at 0x0af00038<br />
ephemeral segment allocation context: none<br />
&nbsp;segment&nbsp;&nbsp;&nbsp; begin allocated&nbsp;&nbsp;&nbsp;&nbsp; size<br />
0af00000 0af00038&nbsp; 0af92a0c 0x000929d4(600532)<br />
Large object heap starts at 0x16f00038<br />
&nbsp;segment&nbsp;&nbsp;&nbsp; begin allocated&nbsp;&nbsp;&nbsp;&nbsp; size<br />
16f00000 16f00038&nbsp; 16f00048 0x00000010(16)<br />
Heap Size&nbsp;&nbsp; 0x929e4(600548)<br />
------------------------------<br />
Heap 3 (000f7bc8)<br />
generation 0 starts at 0x0ef7b270<br />
generation 1 starts at 0x0ef7b264<br />
generation 2 starts at 0x0ef00038<br />
ephemeral segment allocation context: none<br />
&nbsp;segment&nbsp;&nbsp;&nbsp; begin allocated&nbsp;&nbsp;&nbsp;&nbsp; size<br />
0ef00000 0ef00038&nbsp; 0ef7d27c 0x0007d244(512580)<br />
Large object heap starts at 0x18f00038<br />
&nbsp;segment&nbsp;&nbsp;&nbsp; begin allocated&nbsp;&nbsp;&nbsp;&nbsp; size<br />
18f00000 18f00038&nbsp; 18f00048 0x00000010(16)<br />
Heap Size&nbsp;&nbsp; 0x7d254(512596)<br />
------------------------------<br />
<font color="#ff0000">GC Heap Size&nbsp; 0x676638(6776376)</font></p>
<p>内存占用只有6M，显然不是CLR object导致的问题。那看来真的就是内存碎片了。于是先看看程序中有多少DLL:<br />
0:000&gt; lmf<br />
start&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; module name<br />
00900000 00bc5000&nbsp;&nbsp; xpsp2res C:\WINDOWS\system32\xpsp2res.dll<br />
01000000 01005000&nbsp;&nbsp; w3wp&nbsp;&nbsp;&nbsp;&nbsp; c:\WINDOWS\system32\inetsrv\w3wp.exe<br />
1b740000 1b748000&nbsp;&nbsp; App_global_asax_incckcvw C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\b972f933\24c4c459\App_global.asax.incckcvw.dll<br />
1b770000 1b790000&nbsp;&nbsp; Boke_WebRoot_Admin C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\b972f933\24c4c459\assembly\dl3\0854db20\0aaa279d_a314c801\Boke.WebRoot.Admin.DLL<br />
1b7e0000 1b820000&nbsp;&nbsp; log4net&nbsp; C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\b972f933\24c4c459\assembly\dl3\8af1019b\00a071ef_de00c801\log4net.DLL<br />
1bb00000 1bb0e000&nbsp;&nbsp; App_Web_fsrghzyk C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\b972f933\24c4c459\App_Web_fsrghzyk.dll<br />
1bb20000 1bb30000&nbsp;&nbsp; AspNetPager C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\b972f933\24c4c459\assembly\dl3\53ce5ce1\00a071ef_de00c801\AspNetPager.DLL<br />
1bb30000 1bb3c000&nbsp;&nbsp; App_Web_qenznn_e C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\b972f933\24c4c459\App_Web_qenznn_e.dll<br />
1bb60000 1bb70000&nbsp;&nbsp; UDMap&nbsp;&nbsp;&nbsp; D:\webfolder\dvdvAdmin\bin\Map.dll<br />
50210000 5025c000&nbsp;&nbsp; SMDiagnostics_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\SMDiagnostics\da4366daf8361c62ed3fcec4c55fa9ca\SMDiagnostics.ni.dll<br />
50270000 50368000&nbsp;&nbsp; System_IdentityModel_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.IdentityModel\bc31a40dee949687576d5395efcab6a0\System.IdentityModel.ni.dll<br />
504e0000 50728000&nbsp;&nbsp; System_Runtime_Serialization_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Runtime.Seri#\c861896fa11d6eef9fed23cff7b77b01\System.Runtime.Serialization.ni.dll<br />
507a0000 5185e000&nbsp;&nbsp; System_ServiceModel_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.ServiceModel\719a7cce9b36b780b3edd9869ceb2537\System.ServiceModel.ni.dll<br />
5a300000 5a307000&nbsp;&nbsp; w3tp&nbsp;&nbsp;&nbsp;&nbsp; c:\WINDOWS\system32\inetsrv\w3tp.dll<br />
5a320000 5a332000&nbsp;&nbsp; w3isapi&nbsp; c:\WINDOWS\system32\inetsrv\w3isapi.dll<br />
5a360000 5a36d000&nbsp;&nbsp; w3dt&nbsp;&nbsp;&nbsp;&nbsp; c:\WINDOWS\system32\inetsrv\w3dt.dll<br />
5a390000 5a3e8000&nbsp;&nbsp; w3core&nbsp;&nbsp; c:\WINDOWS\system32\inetsrv\w3core.dll<br />
5a3f0000 5a3f6000&nbsp;&nbsp; w3comlog c:\WINDOWS\system32\inetsrv\w3comlog.dll<br />
5a400000 5a408000&nbsp;&nbsp; w3cache&nbsp; c:\WINDOWS\system32\inetsrv\w3cache.dll<br />
5a420000 5a431000&nbsp;&nbsp; iismap&nbsp;&nbsp; C:\WINDOWS\system32\iismap.dll<br />
5b640000 5b658000&nbsp;&nbsp; strmfilt C:\WINDOWS\system32\strmfilt.dll<br />
5e620000 5e6da000&nbsp;&nbsp; Microsoft_JScript C:\WINDOWS\assembly\GAC_MSIL\Microsoft.JScript\8.0.0.0__b03f5f7f11d50a3a\Microsoft.JScript.dll<br />
5f270000 5f2ca000&nbsp;&nbsp; hnetcfg&nbsp; C:\WINDOWS\system32\hnetcfg.dll<br />
60060000 60066000&nbsp;&nbsp; aspnet_filter C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll<br />
60070000 60075000&nbsp;&nbsp; aspnet_isapi <a href="file:///?\c:\WINDOWS\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll">\\?\c:\WINDOWS\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll</a><br />
608f0000 60901000&nbsp;&nbsp; admwprox C:\WINDOWS\system32\admwprox.dll<br />
60ba0000 60bb1000&nbsp;&nbsp; wamreg&nbsp;&nbsp; c:\WINDOWS\system32\inetsrv\wamreg.dll<br />
62da0000 62da7000&nbsp;&nbsp; lonsint&nbsp; c:\WINDOWS\system32\inetsrv\lonsint.dll<br />
637a0000 63d02000&nbsp;&nbsp; System_Xml_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Xml\e342cc4334d3ab13ce752de73164c01b\System.Xml.ni.dll<br />
64700000 6472d000&nbsp;&nbsp; iisutil&nbsp; c:\WINDOWS\system32\inetsrv\iisutil.dll<br />
647b0000 647d7000&nbsp;&nbsp; iisrtl&nbsp;&nbsp; C:\WINDOWS\system32\iisrtl.dll<br />
64890000 6498a000&nbsp;&nbsp; System_Configuration_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Configuration\edc1f15b90b2c6a4dc59b305f14bb98d\System.Configuration.ni.dll<br />
64e70000 6513c000&nbsp;&nbsp; System_Data C:\WINDOWS\assembly\GAC_32\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll<br />
65140000 657a6000&nbsp;&nbsp; System_Data_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Data\42481d9f835b4b6c150c50d2642781b9\System.Data.ni.dll<br />
65f20000 66ac6000&nbsp;&nbsp; System_Web_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Web\83c662f1a20af1b2deea3f9a040ccbd6\System.Web.ni.dll<br />
67150000 67159000&nbsp;&nbsp; httpapi&nbsp; C:\WINDOWS\system32\httpapi.dll<br />
68000000 68035000&nbsp;&nbsp; rsaenh&nbsp;&nbsp; C:\WINDOWS\system32\rsaenh.dll<br />
685b0000 685ba000&nbsp;&nbsp; gzip&nbsp;&nbsp;&nbsp;&nbsp; C:\WINDOWS\system32\inetsrv\gzip.dll<br />
695a0000 697da000&nbsp;&nbsp; System_Web_Mobile_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Web.Mobile\e7d2fee1612b52a914d8d253d5e49a7c\System.Web.Mobile.ni.dll<br />
69890000 698d0000&nbsp;&nbsp; System_Web_RegularExpressions_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Web.RegularE#\1fa927a42b36176da2cdc193f0435950\System.Web.RegularExpressions.ni.dll<br />
6a2a0000 6a307000&nbsp;&nbsp; webengine <a href="file:///?\c:\WINDOWS\microsoft.net\framework\v2.0.50727\webengine.dll">\\?\c:\WINDOWS\microsoft.net\framework\v2.0.50727\webengine.dll</a><br />
6d0f0000 6d110000&nbsp;&nbsp; iisres&nbsp;&nbsp; c:\WINDOWS\system32\inetsrv\iisres.dll<br />
71640000 7180d000&nbsp;&nbsp; acgenral C:\WINDOWS\AppPatch\acgenral.dll<br />
71ae0000 71ae8000&nbsp;&nbsp; wshtcpip C:\WINDOWS\system32\wshtcpip.dll<br />
71af0000 71b12000&nbsp;&nbsp; shimeng&nbsp; C:\WINDOWS\system32\shimeng.dll<br />
71b20000 71b61000&nbsp;&nbsp; mswsock&nbsp; C:\WINDOWS\system32\mswsock.dll<br />
71b70000 71ba6000&nbsp;&nbsp; uxtheme&nbsp; C:\WINDOWS\system32\uxtheme.dll<br />
71bb0000 71bb9000&nbsp;&nbsp; wsock32&nbsp; C:\WINDOWS\system32\wsock32.dll<br />
71bd0000 71be1000&nbsp;&nbsp; mpr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:\WINDOWS\system32\mpr.dll<br />
71bf0000 71bf8000&nbsp;&nbsp; ws2help&nbsp; C:\WINDOWS\system32\ws2help.dll<br />
71c00000 71c17000&nbsp;&nbsp; ws2_32&nbsp;&nbsp; C:\WINDOWS\system32\ws2_32.dll<br />
71c40000 71c97000&nbsp;&nbsp; netapi32 C:\WINDOWS\system32\netapi32.dll<br />
745e0000 7489e000&nbsp;&nbsp; msi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:\WINDOWS\system32\msi.dll<br />
75490000 754f5000&nbsp;&nbsp; usp10&nbsp;&nbsp;&nbsp; C:\WINDOWS\system32\usp10.dll<br />
75e60000 75e87000&nbsp;&nbsp; apphelp&nbsp; C:\WINDOWS\system32\apphelp.dll<br />
76190000 761a2000&nbsp;&nbsp; msasn1&nbsp;&nbsp; C:\WINDOWS\system32\msasn1.dll<br />
761b0000 76243000&nbsp;&nbsp; crypt32&nbsp; C:\WINDOWS\system32\crypt32.dll<br />
76290000 762ad000&nbsp;&nbsp; imm32&nbsp;&nbsp;&nbsp; C:\WINDOWS\system32\imm32.dll<br />
76920000 769e2000&nbsp;&nbsp; userenv&nbsp; C:\WINDOWS\system32\userenv.dll<br />
76aa0000 76acd000&nbsp;&nbsp; winmm&nbsp;&nbsp;&nbsp; C:\WINDOWS\system32\winmm.dll<br />
76b70000 76b7b000&nbsp;&nbsp; psapi&nbsp;&nbsp;&nbsp; C:\WINDOWS\system32\psapi.dll<br />
76c90000 76cb7000&nbsp;&nbsp; msv1_0&nbsp;&nbsp; C:\WINDOWS\system32\msv1_0.dll<br />
76cf0000 76d0a000&nbsp;&nbsp; iphlpapi C:\WINDOWS\system32\iphlpapi.dll<br />
76e30000 76e3c000&nbsp;&nbsp; rtutils&nbsp; C:\WINDOWS\system32\rtutils.dll<br />
76e40000 76e52000&nbsp;&nbsp; rasman&nbsp;&nbsp; C:\WINDOWS\system32\rasman.dll<br />
76e60000 76e8f000&nbsp;&nbsp; tapi32&nbsp;&nbsp; C:\WINDOWS\system32\tapi32.dll<br />
76e90000 76ecf000&nbsp;&nbsp; rasapi32 C:\WINDOWS\system32\rasapi32.dll<br />
76ed0000 76efa000&nbsp;&nbsp; dnsapi&nbsp;&nbsp; C:\WINDOWS\system32\dnsapi.dll<br />
76f10000 76f3e000&nbsp;&nbsp; wldap32&nbsp; C:\WINDOWS\system32\wldap32.dll<br />
76f50000 76f63000&nbsp;&nbsp; secur32&nbsp; C:\WINDOWS\system32\secur32.dll<br />
76f70000 76f77000&nbsp;&nbsp; winrnr&nbsp;&nbsp; C:\WINDOWS\system32\winrnr.dll<br />
76f80000 76f85000&nbsp;&nbsp; rasadhlp C:\WINDOWS\system32\rasadhlp.dll<br />
77010000 770d6000&nbsp;&nbsp; comres&nbsp;&nbsp; C:\WINDOWS\system32\comres.dll<br />
77380000 77411000&nbsp;&nbsp; user32&nbsp;&nbsp; C:\WINDOWS\system32\user32.dll<br />
77420000 77523000&nbsp;&nbsp; comctl32 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55\comctl32.dll<br />
77670000 777a9000&nbsp;&nbsp; ole32&nbsp;&nbsp;&nbsp; C:\WINDOWS\system32\ole32.dll<br />
777b0000 77833000&nbsp;&nbsp; clbcatq&nbsp; C:\WINDOWS\system32\clbcatq.dll<br />
77b70000 77b84000&nbsp;&nbsp; msacm32&nbsp; C:\WINDOWS\system32\msacm32.dll<br />
77b90000 77b98000&nbsp;&nbsp; version&nbsp; C:\WINDOWS\system32\version.dll<br />
77ba0000 77bfa000&nbsp;&nbsp; msvcrt&nbsp;&nbsp; C:\WINDOWS\system32\msvcrt.dll<br />
77c00000 77c48000&nbsp;&nbsp; gdi32&nbsp;&nbsp;&nbsp; C:\WINDOWS\system32\gdi32.dll<br />
77c50000 77cef000&nbsp;&nbsp; rpcrt4&nbsp;&nbsp; C:\WINDOWS\system32\rpcrt4.dll<br />
77d00000 77d8b000&nbsp;&nbsp; oleaut32 C:\WINDOWS\system32\oleaut32.dll<br />
77da0000 77df2000&nbsp;&nbsp; shlwapi&nbsp; C:\WINDOWS\system32\shlwapi.dll<br />
77e00000 77e21000&nbsp;&nbsp; ntmarta&nbsp; C:\WINDOWS\system32\ntmarta.dll<br />
77e40000 77f42000&nbsp;&nbsp; kernel32 C:\WINDOWS\system32\kernel32.dll<br />
77f50000 77feb000&nbsp;&nbsp; advapi32 C:\WINDOWS\system32\advapi32.dll<br />
78130000 781cb000&nbsp;&nbsp; msvcr80&nbsp; C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0DE06ACD\msvcr80.dll<br />
79000000 79045000&nbsp;&nbsp; mscoree&nbsp; C:\WINDOWS\system32\mscoree.dll<br />
79060000 790b3000&nbsp;&nbsp; mscorjit C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll<br />
790c0000 79b90000&nbsp;&nbsp; mscorlib_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\56cbcbd518a77421a852a37b61624936\mscorlib.ni.dll<br />
79e70000 7a3d6000&nbsp;&nbsp; mscorwks C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll<br />
7a440000 7ac06000&nbsp;&nbsp; System_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System\19aba12bb5350aa99107e93bafbb4f51\System.ni.dll<br />
7ade0000 7af6c000&nbsp;&nbsp; System_Drawing_ni C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Drawing\e3104e1713757f14b54b7835be2a0e26\System.Drawing.ni.dll<br />
7c800000 7c8c0000&nbsp;&nbsp; ntdll&nbsp;&nbsp;&nbsp; C:\WINDOWS\system32\ntdll.dll<br />
7c8d0000 7d0ce000&nbsp;&nbsp; shell32&nbsp; C:\WINDOWS\system32\shell32.dll<br />
7e020000 7e02f000&nbsp;&nbsp; samlib&nbsp;&nbsp; C:\WINDOWS\system32\samlib.dll<br />
7f000000 7f009000&nbsp;&nbsp; lpk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:\WINDOWS\system32\lpk.dll</p>
<p>非常普通。也就这点DLL，根本没有导致内存碎片的潜力呀！不死心，看看是不是有很多线程被block住了。要是有个几百个线程，嘿嘿<br />
0:000&gt; ~<br />
.&nbsp; 0&nbsp; Id: 694.540 Suspend: 1 Teb: 7ffdd000 Unfrozen<br />
&nbsp;&nbsp; 1&nbsp; Id: 694.12a0 Suspend: 1 Teb: 7ffdb000 Unfrozen<br />
&nbsp;&nbsp; 2&nbsp; Id: 694.1040 Suspend: 1 Teb: 7ffda000 Unfrozen<br />
&nbsp;&nbsp; 3&nbsp; Id: 694.11f0 Suspend: 1 Teb: 7ffd9000 Unfrozen<br />
&nbsp;&nbsp; 4&nbsp; Id: 694.13d0 Suspend: 1 Teb: 7ffd7000 Unfrozen<br />
&nbsp;&nbsp; 5&nbsp; Id: 694.1338 Suspend: 1 Teb: 7ffd6000 Unfrozen<br />
&nbsp;&nbsp; 6&nbsp; Id: 694.10e4 Suspend: 1 Teb: 7ffd5000 Unfrozen<br />
&nbsp;&nbsp; 7&nbsp; Id: 694.e4c Suspend: 1 Teb: 7ffd4000 Unfrozen<br />
&nbsp;&nbsp; 8&nbsp; Id: 694.10a8 Suspend: 1 Teb: 7ffd3000 Unfrozen<br />
&nbsp;&nbsp; 9&nbsp; Id: 694.1144 Suspend: 1 Teb: 7ff9f000 Unfrozen<br />
&nbsp; 10&nbsp; Id: 694.1340 Suspend: 1 Teb: 7ff9e000 Unfrozen<br />
&nbsp; 11&nbsp; Id: 694.1484 Suspend: 1 Teb: 7ff9d000 Unfrozen<br />
&nbsp; 12&nbsp; Id: 694.1170 Suspend: 1 Teb: 7ff9c000 Unfrozen<br />
&nbsp; 13&nbsp; Id: 694.11d8 Suspend: 1 Teb: 7ff9b000 Unfrozen<br />
&nbsp; 14&nbsp; Id: 694.1768 Suspend: 1 Teb: 7ff9a000 Unfrozen<br />
&nbsp; 15&nbsp; Id: 694.173c Suspend: 1 Teb: 7ff99000 Unfrozen<br />
&nbsp; 16&nbsp; Id: 694.a80 Suspend: 1 Teb: 7ff98000 Unfrozen<br />
&nbsp; 17&nbsp; Id: 694.500 Suspend: 1 Teb: 7ff97000 Unfrozen<br />
&nbsp; 18&nbsp; Id: 694.1194 Suspend: 1 Teb: 7ff96000 Unfrozen<br />
&nbsp; 19&nbsp; Id: 694.16c8 Suspend: 1 Teb: 7ff95000 Unfrozen<br />
&nbsp; 20&nbsp; Id: 694.162c Suspend: 1 Teb: 7ff94000 Unfrozen<br />
&nbsp; 21&nbsp; Id: 694.a8c Suspend: 1 Teb: 7ff93000 Unfrozen<br />
&nbsp; 22&nbsp; Id: 694.ad4 Suspend: 1 Teb: 7ff92000 Unfrozen<br />
&nbsp; 23&nbsp; Id: 694.1098 Suspend: 1 Teb: 7ff2f000 Unfrozen<br />
&nbsp; 24&nbsp; Id: 694.b08 Suspend: 1 Teb: 7ff2e000 Unfrozen<br />
&nbsp; 25&nbsp; Id: 694.19c Suspend: 1 Teb: 7ff90000 Unfrozen<br />
&nbsp; 26&nbsp; Id: 694.fcc Suspend: 1 Teb: 7ff2d000 Unfrozen<br />
&nbsp; 27&nbsp; Id: 694.764 Suspend: 1 Teb: 7ff91000 Unfrozen<br />
&nbsp; 28&nbsp; Id: 694.1334 Suspend: 1 Teb: 7ff2b000 Unfrozen</p>
<p>。。。线程也这么少，怎么办</p>
<p>还是不死心。从上面的DLL看到，程序中的模块要么系统的，要么CLR的，没有COM/COM+，问题应该还是在CLR相关的东西上。于是用!eeheap &#8211;loader看看loader heap的大小:</p>
<p>0:000&gt; !eeheap -loader<br />
Loader Heap:<br />
--------------------------------------<br />
System Domain: 7a38f918<br />
LowFrequencyHeap: Size: 0x0(0)bytes.<br />
HighFrequencyHeap: 02e72000(8000:1000) Size: 0x1000(4096)bytes.<br />
StubHeap: 02e7a000(2000:2000) 1b5b0000(10000:4000) Size: 0x6000(24576)bytes.<br />
Virtual Call Stub Heap:<br />
&nbsp; IndcellHeap: Size: 0x0(0)bytes.<br />
&nbsp; LookupHeap: Size: 0x0(0)bytes.<br />
&nbsp; ResolveHeap: Size: 0x0(0)bytes.<br />
&nbsp; DispatchHeap: Size: 0x0(0)bytes.<br />
&nbsp; CacheEntryHeap: Size: 0x0(0)bytes.<br />
Total size: 0x7000(28672)bytes<br />
--------------------------------------<br />
Shared Domain: 7a38fef0<br />
LowFrequencyHeap: 02ea0000(2000:1000) 1b6d0000(10000:d000) Size: 0xe000(57344)bytes.<br />
Wasted: 0x1000(4096)bytes.<br />
HighFrequencyHeap: 02ea2000(8000:5000) Size: 0x5000(20480)bytes.<br />
StubHeap: 02eaa000(2000:1000) 1bc80000(10000:1000) Size: 0x2000(8192)bytes.<br />
Wasted: 0x1000(4096)bytes.<br />
Virtual Call Stub Heap:<br />
&nbsp; IndcellHeap: 02eb0000(2000:1000) Size: 0x1000(4096)bytes.<br />
&nbsp; LookupHeap: 02eb5000(2000:1000) Size: 0x1000(4096)bytes.<br />
&nbsp; ResolveHeap: 02ebb000(5000:5000) 1bc10000(10000:2000) Size: 0x7000(28672)bytes.<br />
&nbsp; DispatchHeap: 02eb7000(4000:3000) Size: 0x3000(12288)bytes.<br />
&nbsp; CacheEntryHeap: 02eb2000(3000:1000) Size: 0x1000(4096)bytes.<br />
Total size: 0x21000(135168)bytes<br />
--------------------------------------<br />
Domain 1: ded80<br />
LowFrequencyHeap: 02e80000(2000:1000) Size: 0x1000(4096)bytes.<br />
HighFrequencyHeap: 02e82000(8000:4000) Size: 0x4000(16384)bytes.<br />
StubHeap: Size: 0x0(0)bytes.<br />
Virtual Call Stub Heap:<br />
&nbsp; IndcellHeap: Size: 0x0(0)bytes.<br />
&nbsp; LookupHeap: Size: 0x0(0)bytes.<br />
&nbsp; ResolveHeap: Size: 0x0(0)bytes.<br />
&nbsp; DispatchHeap: Size: 0x0(0)bytes.<br />
&nbsp; CacheEntryHeap: Size: 0x0(0)bytes.<br />
Total size: 0x5000(20480)bytes<br />
--------------------------------------<br />
Domain 2: 113b60<br />
LowFrequencyHeap: 1b550000(2000:2000) 1b760000(10000:f000) 1b830000(10000:10000) 1bcd0000(10000:f000) 1c150000(10000:10000) 1c260000(10000:10000) 1c300000(10000:10000) 1c380000(10000:10000) 1c430000(10000:10000) 1c510000(10000:10000) 1c5c0000(10000:10000) 1c6b0000(10000:10000) 1c750000(10000:10000) 1c800000(10000:f000) 1c8b0000(10000:f000) 1c920000(10000:10000) &#8230;&#8230;<br />
1db30000(10000:f000) 1dbc0000(10000:f000) 1dca0000(10000:f000) 1dd50000(10000:10000) 1de00000(10000:10000) 1de90000(10000:10000) 1df40000(10000:10000) 1dfb0000(10000:10000) 1df90000(10000:f000) 1e0e0000(10000:f000) 1e180000(10000:10000) 1e230000(10000:10000) 1e2d0000(10000:10000) 1e370000(10000:10000) 1e420000(10000:f000) 1e4b0000(10000:f000) 1e550000(10000:f000) 1e600000(10000:10000) 1e6b0000(10000:10000) 1e740000(10000:10000) 1e7f0000(10000:10000) 1e8e0000(10000:10000) 1eb60000(10000:f000) 1ec10000(10000:f000) 1ed30000(10000:10000) 1eda0000(10000:10000) 1ee40000(10000:c000) Size: 0x447000(4485120)bytes.<br />
Wasted: 0x17000(94208)bytes.<br />
HighFrequencyHeap: 1b552000(8000:8000) 1b820000(10000:f000) 1bb80000(10000:10000) 1c120000(10000:10000) 1c230000(10000:f000) 1c2d0000(10000:10000) 1c390000(10000:10000) 1c460000(10000:10000) 1c570000(10000:10000) 1c610000(10000:10000) 1c720000(10000:f000) 1c7d0000(10000:10000) &#8230;&#8230;<br />
1dd20000(10000:10000) 1ddf0000(10000:10000) 1dea0000(10000:10000) 1df20000(10000:f000) 1df30000(10000:10000) 1e080000(10000:10000) 1e150000(10000:10000) 1e220000(10000:10000) 1e2e0000(10000:10000) 1e3b0000(10000:f000) 1e450000(10000:10000) 1e500000(10000:10000) 1e5d0000(10000:10000) 1e6a0000(10000:10000) 1e750000(10000:10000) 1e860000(10000:f000) 1e910000(10000:10000) 1ebb0000(10000:10000) 1ec80000(10000:10000) 1ed90000(10000:10000) 1ee50000(10000:9000) Size: 0x3b8000(3899392)bytes.<br />
Wasted: 0x9000(36864)bytes.<br />
StubHeap: 1b55a000(2000:1000) Size: 0x1000(4096)bytes.<br />
Virtual Call Stub Heap:<br />
&nbsp; IndcellHeap: 1b5a0000(3000:1000) Size: 0x1000(4096)bytes.<br />
&nbsp; LookupHeap: 1b5a6000(3000:1000) Size: 0x1000(4096)bytes.<br />
&nbsp; ResolveHeap: 1b5ac000(4000:1000) Size: 0x1000(4096)bytes.<br />
&nbsp; DispatchHeap: 1b5a9000(3000:1000) Size: 0x1000(4096)bytes.<br />
&nbsp; CacheEntryHeap: 1b5a3000(3000:1000) Size: 0x1000(4096)bytes.<br />
Total size: 0x804000(8404992)bytes<br />
--------------------------------------<br />
Jit code heap:<br />
LoaderCodeHeap: 1ee10000(10000:c000) Size: 0xc000(49152)bytes.<br />
LoaderCodeHeap: 1ed60000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1ebe0000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1e8d0000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1e7a0000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1e690000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1e5a0000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1e4a0000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1e3a0000(10000:10000) Size: 0x10000(65536)bytes.<br />
&#8230;&#8230;<br />
LoaderCodeHeap: 1cb70000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1ca50000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1c980000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1c870000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1c780000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1c640000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1c540000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1c400000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1c330000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1c1c0000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1bce0000(10000:10000) Size: 0x10000(65536)bytes.<br />
LoaderCodeHeap: 1bc70000(10000:1000) Size: 0x1000(4096)bytes.<br />
HostCodeHeap: 1bc60000 Size: 0xa000(40960)bytes.<br />
LoaderCodeHeap: 1b7d0000(10000:10000) Size: 0x10000(65536)bytes.<br />
Total size: 0x2d7000(2977792)bytes<br />
--------------------------------------<br />
Module Thunk heaps:<br />
Module 50224000: Size: 0x0(0)bytes.<br />
Module 505c4000: Size: 0x0(0)bytes.<br />
Module 648ec000: Size: 0x0(0)bytes.<br />
Module 6638c000: Size: 0x0(0)bytes.<br />
Module 7a71e000: Size: 0x0(0)bytes.<br />
Module 502c2000: Size: 0x0(0)bytes.<br />
Module 790c2000: Size: 0x0(0)bytes.<br />
Module 02ea2380: Size: 0x0(0)bytes.<br />
Module 02ea2010: Size: 0x0(0)bytes.<br />
&#8230;&#8230;<br />
Module 1ed9705c: Size: 0x0(0)bytes.<br />
Module 1ed9a884: Size: 0x0(0)bytes.<br />
Module 1ed9e0ac: Size: 0x0(0)bytes.<br />
Module 1ee51944: Size: 0x0(0)bytes.<br />
Module 1ee5516c: Size: 0x0(0)bytes.<br />
Total size: 0x0(0)bytes<br />
--------------------------------------<br />
Module Lookup Table heaps:<br />
Module 50224000: Size: 0x0(0)bytes.<br />
Module 505c4000: Size: 0x0(0)bytes.<br />
Module 648ec000: Size: 0x0(0)bytes.<br />
Module 6638c000: Size: 0x0(0)bytes.<br />
Module 7a71e000: Size: 0x0(0)bytes.<br />
Module 502c2000: Size: 0x0(0)bytes.<br />
Module 790c2000: Size: 0x0(0)bytes.<br />
Module 02ea2380: Size: 0x0(0)bytes.<br />
Module 02ea2010: Size: 0x0(0)bytes.<br />
Module 69670000: Size: 0x0(0)bytes.<br />
&#8230;&#8230;<br />
Module 639ea000: Size: 0x0(0)bytes.<br />
Module 50d5a000: Size: 0x0(0)bytes.<br />
Module 653b4000: Size: 0x0(0)bytes.<br />
Module 02ea27cc: Size: 0x0(0)bytes.<br />
Module 1ed9705c: Size: 0x0(0)bytes.<br />
Module 1ed9a884: Size: 0x0(0)bytes.<br />
Module 1ed9e0ac: Size: 0x0(0)bytes.<br />
Module 1ee51944: Size: 0x0(0)bytes.<br />
Module 1ee5516c: Size: 0x0(0)bytes.<br />
Total size: 0x0(0)bytes<br />
<font color="#ff0000">--------------------------------------<br />
Total LoaderHeap size: 0xb08000(11567104)bytes</font><br />
=======================================</p>
<p>上面只是!eeheap &#8211;loader输出的5%左右。从上面的输出来看，loader heap占用了11MB的内存。这个数字没问题，问题在于这个module list上面。这里成千上万的module,势必导致内存碎片。<br />
前面lmvm命令可以检查加载的module。但是lmvm命令工作方式是Win32层面的。如果DLL通过LoadLibrary起来的，这个命令能看到。但是CLR的动态DLL,除了使用LoadLibrary外，CLR还可以直接用MapViewOfFile的方法直接把DLL弄到内存中操作。这种情况lmvm就没把法了。所以需要用!eeheap &#8211;loader从CLR层面检查。<br />
除了!eeheap外，用!dumpdomain命令，也可以从CLR层面列举出所有的assembly，包括动态的和静态的。<br />
找到内存碎片的原因后，接下来就是分析这些碎片的来源了。既然这里是module，那随便挑一个，用!dumpmodule检查详细信息:<br />
0:000&gt; !dumpmodule -mt 1ee5516c<br />
Name: cplxobsw, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null<br />
Attributes: PEFile <br />
Assembly: 1e929530<br />
LoaderHeap: 00000000<br />
TypeDefToMethodTableMap: 1ee47f18<br />
TypeRefToMethodTableMap: 1ee47fe4<br />
MethodDefToDescMap: 1ee48058<br />
FieldDefToDescMap: 1ee484f4<br />
MemberRefToDescMap: 1ee486e8<br />
FileReferencesMap: 1ee488a4<br />
AssemblyReferencesMap: 1ee488a8<br />
MetaData start address: 1ee8be8c (49668 bytes)</p>
<p>Types defined in this module</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MT&nbsp;&nbsp;&nbsp; TypeDef Name<br />
------------------------------------------------------------------------------<br />
1ee57e5c 0x02000002 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap<br />
1ee587ac 0x02000003 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderI_UAC_WSSoap<br />
1ee55844 0x02000004 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializer1<br />
1ee56fac 0x02000005 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer<br />
1ee5745c 0x02000006 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1<br />
1ee579d4 0x02000007 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer2<br />
1ee575ec 0x02000008 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer3<br />
1ee55e7c 0x02000009 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer4<br />
1ee559cc 0x0200000a Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer5<br />
1ee55b5c 0x0200000b Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer6<br />
1ee57a9c 0x0200000c Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer7<br />
1ee55db4 0x0200000d Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer8<br />
1ee56714 0x0200000e Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer9<br />
1ee5777c 0x0200000f Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer10<br />
1ee57524 0x02000010 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer11<br />
1ee56d54 0x02000011 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer12<br />
1ee57844 0x02000012 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer13<br />
1ee568a4 0x02000013 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer14<br />
1ee576b4 0x02000014 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer15<br />
1ee55a94 0x02000015 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer16<br />
1ee55cec 0x02000016 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer17<br />
1ee57204 0x02000017 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer18<br />
1ee5619c 0x02000018 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer19<br />
1ee5632c 0x02000019 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer20<br />
1ee55f44 0x0200001a Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer21<br />
1ee572cc 0x0200001b Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer22<br />
1ee57c2c 0x0200001c Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer23<br />
1ee55c24 0x0200001d Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer24<br />
1ee56c8c 0x0200001e Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer25<br />
1ee567dc 0x0200001f Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer26<br />
1ee56e1c 0x02000020 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer27<br />
1ee56584 0x02000021 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer28<br />
1ee56a34 0x02000022 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer29<br />
1ee5713c 0x02000023 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer30<br />
1ee5600c 0x02000024 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer31<br />
1ee57074 0x02000025 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer32<br />
1ee560d4 0x02000026 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer33<br />
1ee564bc 0x02000027 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer34<br />
1ee5696c 0x02000028 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer35<br />
1ee57394 0x02000029 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer36<br />
1ee56ee4 0x0200002a Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer37<br />
1ee563f4 0x0200002b Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer38<br />
1ee56264 0x0200002c Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer39<br />
1ee56afc 0x0200002d Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer40<br />
1ee56bc4 0x0200002e Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer41<br />
1ee5790c 0x0200002f Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer42<br />
1ee5664c 0x02000030 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer43<br />
1ee57b64 0x02000031 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer44<br />
1ee55904 0x02000032 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer45<br />
1ee5575c 0x02000033 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializerContract</p>
<p>Types referenced in this module</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MT&nbsp;&nbsp;&nbsp; TypeRef Name<br />
------------------------------------------------------------------------------<br />
63a191a4 0x01000001 System.Xml.Serialization.XmlSerializationWriter<br />
63a18ac0 0x01000002 System.Xml.Serialization.XmlSerializationReader<br />
63a19804 0x01000003 System.Xml.Serialization.XmlSerializer<br />
63a19798 0x01000004 System.Xml.Serialization.XmlSerializerImplementation<br />
1bb88e8c 0x01000005 t_UserInfo<br />
639f2988 0x01000006 System.Xml.XmlReader<br />
790fd8b4 0x01000007 System.Collections.Hashtable<br />
790ffe7c 0x01000008 System.Type<br />
790f9244 0x0100000e System.String<br />
790fdb60 0x0100000f System.Int32<br />
639f3758 0x01000010 System.Xml.XmlConvert<br />
790f8a7c 0x01000014 System.Object<br />
79103c00 0x01000019 System.Boolean<br />
639f59e0 0x0100001a System.Xml.XmlQualifiedName<br />
639fa358 0x0100001b System.Xml.XmlNameTable</p>
<p><br />
上面的输入就非常明显了。程序明显是在做XmlSerialization。接下来看看是在Serialize什么类型的object，有了这个信息后，去看源代码就更有方向了.随便找一个method table来看:</p>
<p><br />
0:000&gt; !dumpmt -md 1ee57e5c <br />
EEClass: 1ee4b428<br />
Module: 1ee5516c<br />
Name: Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap<br />
mdToken: 02000002&nbsp; (cplxobsw, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null)<br />
BaseSize: 0x44<br />
ComponentSize: 0x0<br />
Number of IFaces in IFaceMap: 0<br />
Slots in VTable: 53<br />
--------------------------------------<br />
MethodDesc Table<br />
&nbsp;&nbsp; Entry MethodDesc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JIT Name<br />
7934cdcc&nbsp;&nbsp; 79137ab8&nbsp;&nbsp; PreJIT System.Object.ToString()<br />
7934bba0&nbsp;&nbsp; 79137ac0&nbsp;&nbsp; PreJIT System.Object.Equals(System.Object)<br />
7934bb90&nbsp;&nbsp; 79137ad8&nbsp;&nbsp; PreJIT System.Object.GetHashCode()<br />
793424c0&nbsp;&nbsp; 79137ae0&nbsp;&nbsp; PreJIT System.Object.Finalize()<br />
1ee5802d&nbsp;&nbsp; 1ee57e38&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.InitCallbacks()<br />
1ee57f61&nbsp;&nbsp; 1ee57cc0&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write3_UserReg(System.Object[])<br />
1ee57f65&nbsp;&nbsp; 1ee57cc8&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write4_UserRegResponse(System.Object[])<br />
1ee57f69&nbsp;&nbsp; 1ee57cd0&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write5_UserRegSimple(System.Object[])<br />
1ee57f6d&nbsp;&nbsp; 1ee57cd8&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write6_UserRegSimpleResponse(System.Object[])<br />
1ee57f71&nbsp;&nbsp; 1ee57ce0&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write7_UserRegPhone(System.Object[])<br />
1ee57f75&nbsp;&nbsp; 1ee57ce8&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write8_UserRegPhoneResponse(System.Object[])<br />
1ee57f79&nbsp;&nbsp; 1ee57cf0&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write9_ModifyUserInfo(System.Object[])<br />
1ee57f7d&nbsp;&nbsp; 1ee57cf8&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write10_ModifyUserInfoResponse(System.Object[])<br />
1ee57f81&nbsp;&nbsp; 1ee57d00&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write11_UserLogin(System.Object[])<br />
1ee57f85&nbsp;&nbsp; 1ee57d08&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write12_UserLoginResponse(System.Object[])<br />
1ee57f89&nbsp;&nbsp; 1ee57d10&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write13_UserLogout(System.Object[])<br />
1ee57f8d&nbsp;&nbsp; 1ee57d18&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write14_UserLogoutResponse(System.Object[])<br />
1ee19d80&nbsp;&nbsp; 1ee57d20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JIT Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write15_GetUserInfo(System.Object[])<br />
1ee57f95&nbsp;&nbsp; 1ee57d28&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write16_GetUserInfoResponse(System.Object[])<br />
1ee57f99&nbsp;&nbsp; 1ee57d30&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write17_FindUser(System.Object[])<br />
1ee57f9d&nbsp;&nbsp; 1ee57d38&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write18_FindUserResponse(System.Object[])<br />
1ee57fa1&nbsp;&nbsp; 1ee57d40&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write19_FindUserEx(System.Object[])<br />
1ee57fa5&nbsp;&nbsp; 1ee57d48&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write20_FindUserExResponse(System.Object[])<br />
1ee57fa9&nbsp;&nbsp; 1ee57d50&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write21_ModifyPassword(System.Object[])<br />
1ee57fad&nbsp;&nbsp; 1ee57d58&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write22_ModifyPasswordResponse(System.Object[])<br />
1ee57fb1&nbsp;&nbsp; 1ee57d60&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write23_ResetPassword(System.Object[])<br />
1ee57fb5&nbsp;&nbsp; 1ee57d68&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write24_ResetPasswordResponse(System.Object[])<br />
1ee57fb9&nbsp;&nbsp; 1ee57d70&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write25_ModifyPasswordPhone(System.Object[])<br />
1ee57fbd&nbsp;&nbsp; 1ee57d78&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write26_ModifyPasswordPhoneResponse(System.Object[])<br />
1ee57fc1&nbsp;&nbsp; 1ee57d80&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write27_CheckUserToken(System.Object[])<br />
1ee57fc5&nbsp;&nbsp; 1ee57d88&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write28_CheckUserTokenResponse(System.Object[])<br />
1ee57fc9&nbsp;&nbsp; 1ee57d90&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write29_SetUserStatus(System.Object[])<br />
1ee57fcd&nbsp;&nbsp; 1ee57d98&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write30_SetUserStatusResponse(System.Object[])<br />
1ee57fd1&nbsp;&nbsp; 1ee57da0&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write31_ActivateUser(System.Object[])<br />
1ee57fd5&nbsp;&nbsp; 1ee57da8&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write32_ActivateUserResponse(System.Object[])<br />
1ee57fd9&nbsp;&nbsp; 1ee57db0&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write33_AppActivateUser(System.Object[])<br />
1ee57fdd&nbsp;&nbsp; 1ee57db8&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write34_AppActivateUserResponse(System.Object[])<br />
1ee57ff1&nbsp;&nbsp; 1ee57dc0&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write35_GetUserLoginHistory(System.Object[])<br />
1ee57ff5&nbsp;&nbsp; 1ee57dc8&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write36_GetUserLoginHistoryResponse(System.Object[])<br />
1ee57ff9&nbsp;&nbsp; 1ee57dd0&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write37_GetUnactiveUserNumber(System.Object[])<br />
1ee57ffd&nbsp;&nbsp; 1ee57dd8&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write38_GetUnactiveUserNumberResponse(System.Object[])<br />
1ee58001&nbsp;&nbsp; 1ee57de0&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write39_GetTtlUserNumber(System.Object[])<br />
1ee58005&nbsp;&nbsp; 1ee57de8&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write40_GetTtlUserNumberResponse(System.Object[])<br />
1ee58009&nbsp;&nbsp; 1ee57df0&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write41_GetActiveUserNumber(System.Object[])<br />
1ee5800d&nbsp;&nbsp; 1ee57df8&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write42_GetActiveUserNumberResponse(System.Object[])<br />
1ee58011&nbsp;&nbsp; 1ee57e00&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write43_DailyRegisterCount(System.Object[])<br />
1ee58015&nbsp;&nbsp; 1ee57e08&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write44_DailyRegisterCountResponse(System.Object[])<br />
1ee58019&nbsp;&nbsp; 1ee57e10&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write45_GetDailyReport(System.Object[])<br />
1ee5801d&nbsp;&nbsp; 1ee57e18&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write46_GetDailyReportResponse(System.Object[])<br />
1ee58021&nbsp;&nbsp; 1ee57e20&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write47_Test(System.Object[])<br />
1ee58025&nbsp;&nbsp; 1ee57e28&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write48_TestResponse(System.Object[])<br />
1ee19eb8&nbsp;&nbsp; 1ee57e30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JIT Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap.Write2_t_UserInfo(System.String, System.String, t_UserInfo, Boolean, Boolean)<br />
1ee58031&nbsp;&nbsp; 1ee57e40&nbsp;&nbsp;&nbsp;&nbsp; NONE Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterI_UAC_WSSoap..ctor()</p>
<p>从上面的输出中，就能看到序列化类型的方法。有了这些方法，查找序列化的来源就容易多了。</p>
<p>有了这些信息后，开发人员很容易地定位到问题跟WCF调用相关。实现WCF的时候选择了XML序列化方法。在下面这个blog的评论中，有人批评WCF XML序列化会导致这样的问题:<br />
<a href="http://blogs.msdn.com/tess/archive/2006/02/15/net-memory-leak-xmlserializing-your-way-to-a-memory-leak.aspx">http://blogs.msdn.com/tess/archive/2006/02/15/net-memory-leak-xmlserializing-your-way-to-a-memory-leak.aspx</a></p>
<p>这个问题在这里已经非常明显了。当然dump中还有其它可以挖掘的地方。比如用!dumpheap &#8211;stat看看CLR object的数量。用!dumpheap &#8211;mt寻找一些序列化object的地址，然后用!gcroot看看序列化object的引用关系。或者用!finalizequeue看看是否堆积了大量的object等待Dispose。由于篇幅的关系，这些细枝末节就不列举了。</p>
<p>总的说来，!eeheap &#8211;gc隔离问题到loader heap和dynamic module, !dumpmodule &#8211;mt找到引发序列化的类型，!dumpmt &#8211;md找出类型的详细信息。三个命令就可以隔离出问题。<br />
该问题最后通过WCF object pool的方法缓存WCF client proxy，解决问题。</p>
<img src ="http://www.cnblogs.com/lixiong/aggbug/938430.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41958/" target="_blank">[新闻]Intel 收购 Poky Linux ,为 MID 注入新的动力</a>]]></description></item><item><title>handle leak ts steps in chinese</title><link>http://www.cnblogs.com/lixiong/archive/2006/11/06/551727.html</link><dc:creator>lixiong</dc:creator><author>lixiong</author><pubDate>Mon, 06 Nov 2006 06:16:00 GMT</pubDate><guid>http://www.cnblogs.com/lixiong/archive/2006/11/06/551727.html</guid><wfw:comment>http://www.cnblogs.com/lixiong/comments/551727.html</wfw:comment><comments>http://www.cnblogs.com/lixiong/archive/2006/11/06/551727.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/lixiong/comments/commentRss/551727.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lixiong/services/trackbacks/551727.html</trackback:ping><description><![CDATA[<p><br>1.&nbsp;安装Windbg到C:\Debuggers目录<br>2.&nbsp;安装Application Verifier。对需要调试的程序激活&#8220;Handles - Detect invalid handle usage&#8221;<br>3.&nbsp;确保编译的时候生成了目标程序的symbol文件，并且统一部署到自定义的symbol目录。<br>4.&nbsp;启动目标程序<br>5.&nbsp;启动性能监视器开始监视目标程序，添加<br>Process<br>Processor<br>Memory<br>System<br>6.&nbsp;启动windbg，设定好symbol路径，开始监视目标程序<br>7.&nbsp;在windbg命令窗口输入:<br>.logopen c:\log.txt<br>记录windbg输出到文本文件<br>8.&nbsp;运行!handle和!htrace命令，等待命令执行完成<br>9.&nbsp;输入下列命令避免1st chance exception干扰问题的重现<br>SXN *<br>SXN av<br>SXN clr<br>SXN eh<br>SXN cc<br>10.&nbsp;输入g命令，让目标程序开始运行<br>11.&nbsp;重现问题，问题发生后用windbg挂起程序<br>12.&nbsp;再次输入!handle和!htrace，保存handle信息<br>13.&nbsp;运行.dump命令抓取问题发生后的dump文件<br>14.&nbsp;输入.logclose关闭log文件<br>15.&nbsp;收集性能日志文件</p>
<p>通过分析C:\log.txt文件中问题发生前后的差异，找到发生泄漏的handle是在什么callstack中分配的，以及handle的类型。在结合源代码定位。<br></p>
<img src ="http://www.cnblogs.com/lixiong/aggbug/551727.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41957/" target="_blank">[新闻]雅虎将关闭社交网站Mash</a>]]></description></item><item><title>除了memory leak和handle leak外的其它资源泄露</title><link>http://www.cnblogs.com/lixiong/archive/2006/11/05/550545.html</link><dc:creator>lixiong</dc:creator><author>lixiong</author><pubDate>Sun, 05 Nov 2006 03:13:00 GMT</pubDate><guid>http://www.cnblogs.com/lixiong/archive/2006/11/05/550545.html</guid><wfw:comment>http://www.cnblogs.com/lixiong/comments/550545.html</wfw:comment><comments>http://www.cnblogs.com/lixiong/archive/2006/11/05/550545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/lixiong/comments/commentRss/550545.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lixiong/services/trackbacks/550545.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">除了</span><span lang=EN-US>memory leak</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang=EN-US>handle</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">外，其它类型的资源泄露还有</span><span lang=EN-US>GDI Leak</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang=EN-US>desktop heap high usage</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于</span><span lang=EN-US>GDI Leak</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，可以参考：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Detect and Plug GDI Leaks in Your Code with Two Powerful Tools for Windows XP</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><a href="http://msdn.microsoft.com/msdnmag/issues/03/01/GDILeaks/default.aspx"><font color=#800080>http://msdn.microsoft.com/msdnmag/issues/03/01/GDILeaks/default.aspx</font></a></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Resource Leaks: Detecting, Locating, and Repairing Your Leaky GDI Code</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><a href="http://msdn.microsoft.com/msdnmag/issues/01/03/leaks/default.aspx"><font color=#800080>http://msdn.microsoft.com/msdnmag/issues/01/03/leaks/default.aspx</font></a></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Desktop heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一类特殊的内存。下面这些</span><span lang=EN-US>kb</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对此有一些描述：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>PRB: User32.dll or Kernel32.dll fails to initialize</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><a href="http://support.microsoft.com/kb/184802/en-us"><font color=#800080>http://support.microsoft.com/kb/184802/en-us</font></a></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>"Out of Memory" error message appears when you have a large number of programs running</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><a href="http://support.microsoft.com/kb/126962/en-us"><font color=#800080>http://support.microsoft.com/kb/126962/en-us</font></a></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">到</span><span lang=EN-US>support.microsoft.com </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上搜索</span><span lang=EN-US>desktop heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，可以找到更多的信息。</span><span lang=EN-US>Windows</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">除了使用进程来管理资源外，还是用</span><span lang=EN-US>Session</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang=EN-US>desktop</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来管理资源。比如只有在同一个</span><span lang=EN-US>Session</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里面的进程才可以共享剪贴板数据，</span><span lang=EN-US>Windows Message</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只能在属于同一个</span><span lang=EN-US>desktop</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的进程之间传递。而</span><span lang=EN-US>desktop heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，是操作系统管理的，为不同</span><span lang=EN-US>session</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">创建的，由同一</span><span lang=EN-US>session</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内所有</span><span lang=EN-US>desktop</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">共享的内存。当创建进程，创建</span><span lang=EN-US>GUI</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候，都会消耗</span><span lang=EN-US>desktop heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。当</span><span lang=EN-US>Desktop Heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用光后，系统中各种莫名其妙的问题就会发生。比如无法创建新进程，无法弹出菜单，</span><span lang=EN-US>API</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用会莫名其妙地出错。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Desktop heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用光的原因往往是太多进程同时运行，或者创建了太多</span><span lang=EN-US>GUI object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。怀疑是</span><span lang=EN-US>Desktop heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相关问题的时候，首先可以用下面这篇文章的方法来检查是否</span><span lang=EN-US>Desktop heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用光：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>A new System log entry is not generated if the desktop heap is exhausted in Microsoft Windows 2000</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><a href="http://support.microsoft.com/kb/810807/en-us"><font color=#800080>http://support.microsoft.com/kb/810807/en-us</font></a></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果确认是</span><span lang=EN-US>desktop heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">问题后，检察系统是否有太多进程在同时运行，</span><span lang=EN-US>(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我曾经见过一百多个</span><span lang=EN-US>dllhost</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进程同时运行的情况</span><span lang=EN-US>)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，或者某一程序有特殊的</span><span lang=EN-US>GUI</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作。在优化系统，优化代码后，如果的确需要使用很多</span><span lang=EN-US>desktop heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，可以参考前面的</span><span lang=EN-US>kb</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">改变注册表来做调整。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">除了上面这些系统资源外，还有其它很多资源都可能出现问题，比如</span><span lang=EN-US>TCP Port</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用光。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>When you try to connect from TCP ports greater than 5000 you receive the error 'WSAENOBUFS (10055)'</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><a href="http://support.microsoft.com/kb/196271/en-us"><font color=#800080>http://support.microsoft.com/kb/196271/en-us</font></a></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果排错只是按部就班的操作，排错就不是一项有趣的工作了。</span></p>
<img src ="http://www.cnblogs.com/lixiong/aggbug/550545.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41956/" target="_blank">[新闻]中国互联网战争局势图</a>]]></description></item><item><title>一些重要的计数器</title><link>http://www.cnblogs.com/lixiong/archive/2006/11/05/550424.html</link><dc:creator>lixiong</dc:creator><author>lixiong</author><pubDate>Sat, 04 Nov 2006 17:23:00 GMT</pubDate><guid>http://www.cnblogs.com/lixiong/archive/2006/11/05/550424.html</guid><wfw:comment>http://www.cnblogs.com/lixiong/comments/550424.html</wfw:comment><comments>http://www.cnblogs.com/lixiong/archive/2006/11/05/550424.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/lixiong/comments/commentRss/550424.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lixiong/services/trackbacks/550424.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一些重要的计数器</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解决性能问题的时候，我往往会让客户添加下面一些计数器进行性能收集。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Process object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的所有计数器。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Processor object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的所有计数器</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>System object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的所有计数器</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Memory object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的所有计数器</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果客户的程序是</span><span lang=EN-US>.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序，还会添加</span><span lang=EN-US> .NET </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开头的</span><span lang=EN-US>object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的所有技术其</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果客户使用</span><span lang=EN-US>ASP.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，还会添加</span><span lang=EN-US> ASP.NET </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开头的</span><span lang=EN-US>object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的所有技术其</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分析性能日志的时候，我会重点观察下面这些计数器</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Process object</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Process object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的计数器可以针对目标进程分析内存，</span><span lang=EN-US>CPU,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">线程数目和</span><span lang=EN-US>handle</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数目。首先要确定目标进程，然后分析目标进程的下面一些计数器：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>% Processor Time</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该计数器是该进程占用</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">资源的指标。当进程繁忙的时候，</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">平均占用率应该在</span><span lang=EN-US>80%</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以内。如果超过该数值，程序可以认为发生了</span><span lang=EN-US>high CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的问题。另外一种问题是</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">波动幅度大。虽然平均占用率不高，但是上下跳动频繁。在某一个短时间段里面，会有连续高</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的情况出现。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Handle Count</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该计数器记录了当前进程使用的</span><span lang=EN-US>kernel object handle</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数量。</span><span lang=EN-US>Kernel object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是重要的系统资源。当程序进入稳定运行状态的时候，</span><span lang=EN-US>Handle Count</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数量也应该维持在一个稳定的区间。如果发现</span><span lang=EN-US>Handle Count</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在整个程序周期内总体趋势是连续向上，可以考虑程序是否有</span><span lang=EN-US>Handle Leak</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>ID Process</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该计数器记录了目标进程的进程</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。你可能觉得奇怪，</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有什么好观察的。进程</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是用来观察程序是否有重启发生。比如</span><span lang=EN-US>ASP.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工作进程可能会自动回收。由于进程名都相同，只有通过进程</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来判断是否进程有重新启动现象。如果</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有变化，考虑程序是否发生崩溃或者</span><span lang=EN-US>Recycle</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Private Bytes</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该计数器记录了当前通过</span><span lang=EN-US>VirtualAlloc API Commit</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>Memory</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数量。无论是直接调用</span><span lang=EN-US>API</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">申请的内存，被</span><span lang=EN-US>Heap Manager</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">申请的内存，或者是</span><span lang=EN-US>CLR </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>managed heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，都算在里面。跟</span><span lang=EN-US>Handle Count</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一样，如果在整个程序周期内总体趋势是连续向上，说明有</span><span lang=EN-US>Memory Leak</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Virtual Bytes</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该计数器记录了当前进程申请成功的用户态总内存地址，包括</span><span lang=EN-US>DLL/EXE</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">占用的地址和通过</span><span lang=EN-US>VirtualAlloc API Reserve</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>Memory Space</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数量，所以该计数器应该总大于</span><span lang=EN-US>Private Bytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。一般来说，</span><span lang=EN-US>Virtual Bytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跟</span><span lang=EN-US>Private Bytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的变化大致一致。由于内存分片的存在，</span><span lang=EN-US> Virtual Bytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跟</span><span lang=EN-US>Private Byes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一般保持一个相对稳定的比例关系。当</span><span lang=EN-US>Virtual Bytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跟</span><span lang=EN-US>Private Bytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的比例关系大于</span><span lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候，程序往往有比较严重的内存地址分片。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Processor object</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Processor object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录系统中芯片的负载情况。由于普通程序并不刻意邦定到某个具体</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上执行，所以在多</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">机器上观察</span><span lang=EN-US>Total Instance</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也就足够了</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>% Processor Time </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该计数器跟</span><span lang=EN-US>Process</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的</span><span lang=EN-US>% Processor Time</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的意义一样，不过这里记录的是所有进程带来的芯片，而不是针对具体某一个进程。通过把这个计数器跟</span><span lang=EN-US>Process</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的同名计数器一起比较，就能看出系统的高</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">问题是否是由于单一的某个进程导致的</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>System</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>System object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录系统中一个整体的统计信息。所以不区分</span><span lang=EN-US>Instance. </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过比较</span><span lang=EN-US>System object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的</span><span lang=EN-US>counter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和其他</span><span lang=EN-US>counter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的变化趋势，往往能看出一些线索</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Context Switch/sec </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Context Switch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标示了系统中整体线程的调度，切换频率。线程切换是开销比较大的操作。频繁的线程切换导大量</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">周期被浪费。所以看到高</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候，一定要跟</span><span lang=EN-US>Context Switch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一起比较。如果两者有相同的变化趋势，高</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">往往是由于</span><span lang=EN-US>contention</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">导致的，而不是死循环。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Exception Dispatches/sec</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Exception Dispatches</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示了系统中异常派发，处理的频繁程序。跟线程切换一样，异常处理也需要大量的</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开销。分析方法跟</span><span lang=EN-US>Context Switch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">雷同。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>File Data Operations/sec</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>File Data Operations</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录了当前系统中磁盘文件读写的频繁程度。通过观察该计数器跟其他性能指标的变化趋势，通常能够判断磁盘文件操作是否是性能瓶颈。类似的计数器还有</span><span lang=EN-US>Network Interface\Bytes total/sec</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Memory</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Memory object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录了当前系统中整体内存的统计信息。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Available Mbytes</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Committed Bytes</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Available Mbytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录了当前剩余的物理内存数量。</span><span lang=EN-US>Committed Bytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录了所有进程</span><span lang=EN-US>commit</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的内存数量。结合两个计数器可以观察到：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">两者相加可以粗略估计系统总体可用内存多少，便于估计物理配置</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当</span><span lang=EN-US>Available Mbytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">少于</span><span lang=EN-US>100MB</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候，说明系统总体内存吃紧，会影响到整个系统所有进程的性能。应该考虑增加物理内存或者监察内存泄露</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过比较</span><span lang=EN-US>Process\Private Bytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跟</span><span lang=EN-US>Virtual Bytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，便于进一步确认是否有内存泄露，判断内存泄露是否是某一单个进程导致</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Free System Page Table Entries</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang=EN-US>Pool Paged Bytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang=EN-US>Pool Paged Bytes</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这三个计数器可以衡量核心态空闲内存的数量。特别是当使用</span><span lang=EN-US>/3GB</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开关后，核心态内存地址被压缩，容易导致核心态内存不足，继而引发一些非常妖怪的问题。可以参考前面提到的文章：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>How to use the /userva switch with the /3GB switch to tune the User-mode space to a value between 2 GB and 3 GB</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><a href="http://support.microsoft.com/kb/316739/en-us">http://support.microsoft.com/kb/316739/en-us</a></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>.NET CLR Memory</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>.NET CLR Memory object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录了</span><span lang=EN-US>CLR</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进程中跟</span><span lang=EN-US>CLR</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相关的内存信息。该类别下的所有计数器都很有意思，而且意思也非常直接。建议用一个例子程序进行测试和研究。下面是两个最常用的计数器</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Bytes in all heaps</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Bytes in all heaps</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录了上次</span><span lang=EN-US>GC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发生时候所统计到的，进程中不能被回收的所有</span><span lang=EN-US>CLR object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">占用的内存空间。该计数器不是实时的，每次</span><span lang=EN-US>GC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发生的时候该计数器才更新。跟同一进程的</span><span lang=EN-US>Process\Private bytes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比较，可以区分出</span><span lang=EN-US>managed heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang=EN-US>native memory</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的变化情况。对于</span><span lang=EN-US>memory leak</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，便于区分是</span><span lang=EN-US>managed heap</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>leak</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还是</span><span lang=EN-US>native memory</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>leak</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>%Time in GC</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>%Time in GC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录了</span><span lang=EN-US>GC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发生的频繁程度。一般来说</span><span lang=EN-US>15%</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以内算比较正常。当超过</span><span lang=EN-US>20%</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">说明</span><span lang=EN-US>GC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发生过于频繁。由于</span><span lang=EN-US>GC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不仅仅带来很高的</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开销，还需要挂起目标进程的</span><span lang=EN-US>CLR</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">线程，所以高频率</span><span lang=EN-US>GC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是非常危险的。通过跟</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">利用率和其他性能指标比较，往往能够看出</span><span lang=EN-US>GC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对性能的影响。高频率的</span><span lang=EN-US>GC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">往往因为</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">负载过高</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不合理的架构，对内存使用效率不高</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内存泄露，内存分片导致内存压力</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果目标程序是</span><span lang=EN-US>ASP.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，在</span><span lang=EN-US>ASP.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开头的</span><span lang=EN-US>object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，下面这些计数器对于测量</span><span lang=EN-US>ASP.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的性能非常有用。由于不少计数器存在于多个</span><span lang=EN-US>object</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类别中，下面只列出具体的计数器名字，而不去对应到具体的</span><span lang=EN-US>object:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Application Restarts</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Application Restarts</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录了</span><span lang=EN-US>ASP.NET Application Domain</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">重启的次数。导致</span><span lang=EN-US>ASP.NET appDomain</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">重启的原因往往是虚拟目录中被修改。比如修改了</span><span lang=EN-US>web.config</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，或者防毒程序对虚拟目录进行扫描。通过该计数器可以观察是否有异常的重启现象</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Request Execution time</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Request Execution time</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录了请求的执行时间，是衡量</span><span lang=EN-US>ASP.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">性能的最直接参数。通过该计数器的平均值来衡量性能是否合乎预期值。需要注意的地方是由于</span><span lang=EN-US>Windows</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并非实时系统，所以不能用峰值来衡量整体性能。比如当</span><span lang=EN-US>GC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发生的时候，请求执行时间肯定都要超过</span><span lang=EN-US>GC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时间。所以平均值才是有效的标准</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Request Current</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Request Current</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录了当前正在处理的和等待处理的请求。最理想的情况是</span><span lang=EN-US>Request Current</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等于</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数量，这说明请求跟硬件资源能并发处理的能力恰好吻合，硬件投资正运行在最优状态。但是一般说来，当负荷比较大的时候，</span><span lang=EN-US>Request Current</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也随着增高。如果</span><span lang=EN-US>Request Current</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在一段时间内有超过</span><span lang=EN-US>10</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的情况，说明性能有问题。注意观察这个时候对应的</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">情况和其他的资源。如果</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不高，很可能是程序中有</span><span lang=EN-US>blocking</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发生，比如等待数据库请求，导致请求无法及时完成。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Request/second</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Request/second</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">计数器记录了每秒钟到达</span><span lang=EN-US>ASP.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的请求数。这是衡量</span><span lang=EN-US>ASP.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">负载的直接参数。注意观察</span><span lang=EN-US>Request/second</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是否超过程序的预期吞吐量。如果</span><span lang=EN-US>Request/Second</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有突发的波动，注意看是否有拒绝服务攻击。通过把</span><span lang=EN-US>Request/second,Request Current, Request Execution time</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和系统资源一起比较，往往能够看出来</span><span lang=EN-US>ASP.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">整体性能的变化和各个因素之间的影响</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Request in Application Queue</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当</span><span lang=EN-US>ASP.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有空余的工作线程来处理新进入的请求的时候，新的请求会被放到</span><span lang=EN-US>Application Queue</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中。当</span><span lang=EN-US>Application Queue</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">堆积的请求也超过设定数值的时候，</span><span lang=EN-US>ASP.NET</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">直接返回</span><span lang=EN-US>503 Server too busy</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">错误，同时丢弃该请求。所以正常情况下，</span><span lang=EN-US>Request in Application Queue</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应该总为</span><span lang=EN-US>0</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，否则说明已经有请求堆积，性能问题严重</span></p>
<img src ="http://www.cnblogs.com/lixiong/aggbug/550424.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41956/" target="_blank">[新闻]中国互联网战争局势图</a>]]></description></item><item><title>IE的leak</title><link>http://www.cnblogs.com/lixiong/archive/2006/10/24/538878.html</link><dc:creator>lixiong</dc:creator><author>lixiong</author><pubDate>Tue, 24 Oct 2006 14:53:00 GMT</pubDate><guid>http://www.cnblogs.com/lixiong/archive/2006/10/24/538878.html</guid><wfw:comment>http://www.cnblogs.com/lixiong/comments/538878.html</wfw:comment><comments>http://www.cnblogs.com/lixiong/archive/2006/10/24/538878.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cnblogs.com/lixiong/comments/commentRss/538878.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lixiong/services/trackbacks/538878.html</trackback:ping><description><![CDATA[摘要: IE的memory leak, 带demo和分析，介绍如何排查native memory leak，debug paper的一部分。&nbsp;&nbsp;<a href='http://www.cnblogs.com/lixiong/archive/2006/10/24/538878.html'>阅读全文</a><img src ="http://www.cnblogs.com/lixiong/aggbug/538878.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41955/" target="_blank">[新闻]开源多点触摸技术试运行</a>]]></description></item><item><title>useful log options in .Net</title><link>http://www.cnblogs.com/lixiong/archive/2006/10/13/528034.html</link><dc:creator>lixiong</dc:creator><author>lixiong</author><pubDate>Fri, 13 Oct 2006 02:17:00 GMT</pubDate><guid>http://www.cnblogs.com/lixiong/archive/2006/10/13/528034.html</guid><wfw:comment>http://www.cnblogs.com/lixiong/comments/528034.html</wfw:comment><comments>http://www.cnblogs.com/lixiong/archive/2006/10/13/528034.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/lixiong/comments/commentRss/528034.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lixiong/services/trackbacks/528034.html</trackback:ping><description><![CDATA[这个要整理出来，别忘了
<img src ="http://www.cnblogs.com/lixiong/aggbug/528034.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41954/" target="_blank">[新闻]国内软件外包高管集聚大连 探讨竞争与应对策略</a>]]></description></item><item><title>Mixed DLL Loading analysis</title><link>http://www.cnblogs.com/lixiong/archive/2006/09/21/510198.html</link><dc:creator>lixiong</dc:creator><author>lixiong</author><pubDate>Wed, 20 Sep 2006 16:43:00 GMT</pubDate><guid>http://www.cnblogs.com/lixiong/archive/2006/09/21/510198.html</guid><wfw:comment>http://www.cnblogs.com/lixiong/comments/510198.html</wfw:comment><comments>http://www.cnblogs.com/lixiong/archive/2006/09/21/510198.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/lixiong/comments/commentRss/510198.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lixiong/services/trackbacks/510198.html</trackback:ping><description><![CDATA[摘要: 这是一个mixed dll loading导致deadlock的典型例子。合理利用dump+windbg+sos其实还是比较容易能定位问题的&nbsp;&nbsp;<a href='http://www.cnblogs.com/lixiong/archive/2006/09/21/510198.html'>阅读全文</a><img src ="http://www.cnblogs.com/lixiong/aggbug/510198.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41953/" target="_blank">[新闻]Mac OS X 10.5.5 Build 9F23 测试版和 Safari 4 预览版</a>]]></description></item><item><title>Case study, about cnblogs</title><link>http://www.cnblogs.com/lixiong/archive/2006/09/18/507753.html</link><dc:creator>lixiong</dc:creator><author>lixiong</author><pubDate>Mon, 18 Sep 2006 11:17:00 GMT</pubDate><guid>http://www.cnblogs.com/lixiong/archive/2006/09/18/507753.html</guid><wfw:comment>http://www.cnblogs.com/lixiong/comments/507753.html</wfw:comment><comments>http://www.cnblogs.com/lixiong/archive/2006/09/18/507753.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/lixiong/comments/commentRss/507753.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lixiong/services/trackbacks/507753.html</trackback:ping><description><![CDATA[摘要: 关于cnblog性能问题的一个案例分析，典型的pending for resource问题。准备放到调试文章的performance小结，这里先放出来。<br>文章中关于cnblogs涉及到的具体函数名已经混淆过<br>希望大家多指点&nbsp;&nbsp;<a href='http://www.cnblogs.com/lixiong/archive/2006/09/18/507753.html'>阅读全文</a><img src ="http://www.cnblogs.com/lixiong/aggbug/507753.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41952/" target="_blank">[新闻]十月上市 Google手机HTC Dream官方图现</a>]]></description></item></channel></rss>