Debugging 如何分析<;未分类>;windbg中的内存使用

Debugging 如何分析<;未分类>;windbg中的内存使用,debugging,memory,windbg,unmanaged,Debugging,Memory,Windbg,Unmanaged,这是在x64计算机上运行的.NET v4 windows服务应用程序。在稳定运行几天后,windows服务内存消耗会疯狂地急剧增加,直到崩溃。我能够以1.2GB的速度捕获它,并捕获内存转储。这是我得到的 如果我跑!地址-在我的转储文件上的windbg摘要我得到以下结果 !!地址-摘要 --- Usage Summary ------ RgnCount ------- Total Size -------- %ofBusy %ofTotal Free 82

这是在x64计算机上运行的.NET v4 windows服务应用程序。在稳定运行几天后,windows服务内存消耗会疯狂地急剧增加,直到崩溃。我能够以1.2GB的速度捕获它,并捕获内存转储。这是我得到的

如果我跑!地址-在我的转储文件上的windbg摘要我得到以下结果

!!地址-摘要

--- Usage Summary ------ RgnCount ------- Total Size -------- %ofBusy  %ofTotal
Free                     821      7ff`7e834000 (   7.998 Tb)           99.98%
<unclassified>           3696       0`6eece000 (   1.733 Gb)  85.67%   0.02%
Image                    1851       0`0ea6f000 ( 234.434 Mb)  11.32%   0.00%
Stack                    1881       0`03968000 (  57.406 Mb)  2.77%    0.00%
TEB                      628        0`004e8000 (   4.906 Mb)  0.24%    0.00%
NlsTables                1          0`00023000 ( 140.000 kb)  0.01%    0.00%
ActivationContextData    3          0`00006000 (  24.000 kb)  0.00%    0.00%
CsrSharedMemory          1          0`00005000 (  20.000 kb)  0.00%    0.00%
PEB                      1          0`00001000 (   4.000 kb)  0.00%    0.00%
-
-
-
--- Type Summary (for busy) -- RgnCount ----- Total Size ----- %ofBusy %ofTotal
MEM_PRIVATE                        5837 0`7115a000 (  1.767 Gb)  87.34%  0.02%
MEM_IMAGE                          2185 0`0f131000 (241.191 Mb)  11.64%  0.00%
MEM_MAPPED                           40 0`01531000 ( 21.191 Mb)   1.02%  0.00%
-
-
--- State Summary ------------ RgnCount ------ Total Size ---- %ofBusy %ofTotal
MEM_FREE                            821 7ff`7e834000 (  7.998 Tb)        99.98%
MEM_COMMIT                         6127   0`4fd5e000 (  1.247 Gb) 61.66%  0.02%
MEM_RESERVE                        1935   0`31a5e000 (794.367 Mb) 38.34%  0.01%
-
-
--Protect Summary(for commit)- RgnCount ------ Total Size --- %ofBusy %ofTotal
PAGE_READWRITE                     3412 0`3e862000 (1000.383 Mb) 48.29%   0.01%
PAGE_EXECUTE_READ                   220 0`0b12f000 ( 177.184 Mb)  8.55%   0.00%
PAGE_READONLY                       646 0`02fd0000 (  47.813 Mb)  2.31%   0.00%
PAGE_WRITECOPY                      410 0`01781000 (  23.504 Mb)  1.13%   0.00%
PAGE_READWRITE|PAGE_GUARD          1224 0`012f2000 (  18.945 Mb)  0.91%   0.00%
PAGE_EXECUTE_READWRITE              144 0`007b9000 (   7.723 Mb)  0.37%   0.00%
PAGE_EXECUTE_WRITECOPY               70 0`001cd000 (   1.801 Mb)  0.09%   0.00%
PAGE_EXECUTE                          1 0`00004000 (  16.000 kb)  0.00%   0.00%
-
-
--- Largest Region by Usage ----Base Address -------- Region Size ----------
Free                            0`8fff0000        7fe`59050000 (   7.994 Tb)
<unclassified>                  0`80d92000        0`0f25e000 ( 242.367 Mb)
Image                           fe`f6255000       0`0125a000 (  18.352 Mb)
Stack                           0`014d0000        0`000fc000 (1008.000 kb)
TEB                             0`7ffde000        0`00002000 (   8.000 kb)
NlsTables                       7ff`fffb0000      0`00023000 ( 140.000 kb)
ActivationContextData           0`00030000        0`00004000 (  16.000 kb)
CsrSharedMemory                 0`7efe0000        0`00005000 (  20.000 kb)
PEB                             7ff`fffdd000      0`00001000 (   4.000 kb)

“使用情况摘要”显示您有3696个未分类区域,总容量为17.33 Gb

“最大区域”表示未分类区域中最大的区域为242MB。 其余未分类区域(3695个区域)加在一起产生的差异高达17.33 Gb

试着做一件事!heap–s并汇总Virt col以查看本机堆的大小,我认为它们也属于非托管存储桶。
(注意,早期版本显示本机heap explicit from!address-summary)

您最好使用windbg中的EEHeap和GCHandles命令(http://msdn.microsoft.com/en-us/library/bb190764.aspx)试着看看你是否能找到那样可能泄漏/出错的地方


不幸的是,您可能无法获得所需的确切帮助,因为诊断这些类型的问题几乎总是非常耗时的,除了最简单的情况外,还需要有人对转储进行全面分析。基本上,不太可能有人能直接回答堆栈溢出问题。大多数情况下,人们会向你指出可能有用的命令。你需要做大量的挖掘,才能找到更多关于正在发生的事情的信息。

我最近遇到了一个非常类似的情况,发现了一些在调查中有用的技术。没有一个是银弹,但每一个都在这个问题上透露了更多的信息

1) SysInternals中的vmmap.exe(http://technet.microsoft.com/en-us/sysinternals/dd535533)很好地关联了本机内存和托管内存上的信息,并将其显示在一个漂亮的UI中。使用下面的技术可以收集相同的信息,但这是一种更简单的方法,也是一个很好的起点。遗憾的是,它对转储文件不起作用,您需要一个实时进程

2) “!address-summary”输出是更详细的“!address”输出的汇总。我发现将详细输出放入Excel并运行一些数据透视非常有用。使用这种技术,我发现大量列为“”的字节实际上是MEM_图像页,很可能是加载DLL时加载的数据页的副本,但在数据更改时复制。我还可以过滤到大的区域,并钻取特定的地址。用牙签在记忆垃圾堆里乱翻,做大量的祈祷是痛苦的,但也会有所启示

3) 最后,我做了一个穷人版的vmmap.exe技术。我加载了转储文件,打开日志,然后运行!地址!哎呀!堆,还有!线程。我还针对~*k中列出的线程环境块!teb。我关闭了日志文件并将其加载到我最喜欢的编辑器中。然后,我可以找到一个未分类的块并搜索,看看它是否在一个更详细的命令的输出中弹出。您可以非常快速地关联本机堆和托管堆,以从可疑的未分类区域中清除这些堆

这些都太手工了。我想写一个脚本,它将获得类似于我在上面的技术3中生成的输出,并输出一个适合查看vmmap.exe的mmp文件。总有一天

最后一点注意:我在vmmap.exe的输出和!寻址输出并注意到vmmap耦合从不同来源识别的这些类型的区域(类似于!heap和!eeheap使用的),但是!地址不知道。也就是说,这些都是vmmap.exe标记的东西,但是!地址没有:

.data
.pdata
.rdata
.text
64-bit thread stack
Domain 1
Domain 1 High Frequency Heap
Domain 1 JIT Code Heap
Domain 1 Low Frequency Heap
Domain 1 Virtual Call Stub
Domain 1 Virtual Call Stub Lookup Heap
Domain 1 Virtual Call Stub Resolve Heap
GC
Large Object Heap
Native heaps
Thread Environment Blocks
仍然有很多“私有”字节下落不明,但同样,如果我能剔除这些字节,我能够缩小问题的范围


希望这能给你一些关于如何调查的想法。我和你在同一条船上,所以我也很感激你的发现。谢谢

我保存了一份Windows 6.11.1.404调试工具的副本,它似乎能够显示一些对“未分类”更有意义的东西

在该版本中,我看到一个TEB地址列表,然后是:

0:000> !address -summary
 --------- PEB fffde000 not found ----
 TEB fffdd000 in range fffdb000 fffde000
 TEB fffda000 in range fffd8000 fffdb000
...snip...
 TEB fe01c000 in range fe01a000 fe01d000
 ProcessParametrs 002c15e0 in range 002c0000 003c0000
 Environment 002c0810 in range 002c0000 003c0000
-------------------- Usage SUMMARY --------------------------
    TotSize (      KB)   Pct(Tots) Pct(Busy)   Usage
   41f08000 ( 1080352) : 25.76%    34.88%    : RegionUsageIsVAD
   42ecf000 ( 1096508) : 26.14%    00.00%    : RegionUsageFree
    5c21000 (   94340) : 02.25%    03.05%    : RegionUsageImage
    c900000 (  205824) : 04.91%    06.64%    : RegionUsageStack
          0 (       0) : 00.00%    00.00%    : RegionUsageTeb
   68cf8000 ( 1717216) : 40.94%    55.43%    : RegionUsageHeap
          0 (       0) : 00.00%    00.00%    : RegionUsagePageHeap
          0 (       0) : 00.00%    00.00%    : RegionUsagePeb
          0 (       0) : 00.00%    00.00%    : RegionUsageProcessParametrs
          0 (       0) : 00.00%    00.00%    : RegionUsageEnvironmentBlock
       Tot: ffff0000 (4194240 KB) Busy: bd121000 (3097732 KB)

-------------------- Type SUMMARY --------------------------
    TotSize (      KB)   Pct(Tots)  Usage
   42ecf000 ( 1096508) : 26.14%   : <free>
    5e6e000 (   96696) : 02.31%   : MEM_IMAGE
    28ed000 (   41908) : 01.00%   : MEM_MAPPED
   b49c6000 ( 2959128) : 70.55%   : MEM_PRIVATE

-------------------- State SUMMARY --------------------------
    TotSize (      KB)   Pct(Tots)  Usage
   9b4d1000 ( 2544452) : 60.67%   : MEM_COMMIT
   42ecf000 ( 1096508) : 26.14%   : MEM_FREE
   21c50000 (  553280) : 13.19%   : MEM_RESERVE

Largest free region: Base bc480000 - Size 38e10000 (931904 KB)
0:000>!地址-摘要
---------找不到PEB fffde000----
TEB fffdd000在fffdb000 fffde000范围内
TEB fffda000在fffd8000 fffdb000范围内
剪
TEB fe01c000在fe01a000 fe01d000范围内
过程参数002c15e0的范围为002c0000 003c0000
环境002c0810的范围为002c0000 003c0000
--------------------使用摘要--------------------------
TotSize(KB)Pct(Tots)Pct(忙碌)使用率
41f08000(1080352):25.76%34.88%:地区智囊团
42ecf000(1096508):26.14%00.00%:RegionSageFree
5C2100(94340):02.25%03.05%:区域图像
c900000(205824):04.91%06.64%:区域堆栈
0(0):00.00%00.00%:RegionSageTeb
68cf8000(1717216):40.94%55.43%:地区
0(0):00.00%00.00%:RegionSagePageHeap
0(0):00.00%00.00%:RegionSagePEB
0(0):00.00%00.00%:RegionSageProcessParameters
0(0):00.00%00.00%:RegionSageEnvironmentBlock
总计:ffff0000(4194240 KB)忙:bd121000(3097732 KB)
--------------------类型摘要--------------------------
TotSize(KB)Pct(Tots)使用量
42ecf000(1096508):26.14%:
5e6e000(96696):02.31%:MEM_图像
28ed000(41908):01.00%:内存映射
b49c6000(2959128):70.55%:MEM_PRIVATE
--------------------状态摘要--------------------------
TotSize(KB)Pct(Tots)使用量
9b4d1000(2544452):60.67%:MEM_COMMIT
42ecf000(1096508):26.14%:M
0:000> !address -summary
 --------- PEB fffde000 not found ----
 TEB fffdd000 in range fffdb000 fffde000
 TEB fffda000 in range fffd8000 fffdb000
...snip...
 TEB fe01c000 in range fe01a000 fe01d000
 ProcessParametrs 002c15e0 in range 002c0000 003c0000
 Environment 002c0810 in range 002c0000 003c0000
-------------------- Usage SUMMARY --------------------------
    TotSize (      KB)   Pct(Tots) Pct(Busy)   Usage
   41f08000 ( 1080352) : 25.76%    34.88%    : RegionUsageIsVAD
   42ecf000 ( 1096508) : 26.14%    00.00%    : RegionUsageFree
    5c21000 (   94340) : 02.25%    03.05%    : RegionUsageImage
    c900000 (  205824) : 04.91%    06.64%    : RegionUsageStack
          0 (       0) : 00.00%    00.00%    : RegionUsageTeb
   68cf8000 ( 1717216) : 40.94%    55.43%    : RegionUsageHeap
          0 (       0) : 00.00%    00.00%    : RegionUsagePageHeap
          0 (       0) : 00.00%    00.00%    : RegionUsagePeb
          0 (       0) : 00.00%    00.00%    : RegionUsageProcessParametrs
          0 (       0) : 00.00%    00.00%    : RegionUsageEnvironmentBlock
       Tot: ffff0000 (4194240 KB) Busy: bd121000 (3097732 KB)

-------------------- Type SUMMARY --------------------------
    TotSize (      KB)   Pct(Tots)  Usage
   42ecf000 ( 1096508) : 26.14%   : <free>
    5e6e000 (   96696) : 02.31%   : MEM_IMAGE
    28ed000 (   41908) : 01.00%   : MEM_MAPPED
   b49c6000 ( 2959128) : 70.55%   : MEM_PRIVATE

-------------------- State SUMMARY --------------------------
    TotSize (      KB)   Pct(Tots)  Usage
   9b4d1000 ( 2544452) : 60.67%   : MEM_COMMIT
   42ecf000 ( 1096508) : 26.14%   : MEM_FREE
   21c50000 (  553280) : 13.19%   : MEM_RESERVE

Largest free region: Base bc480000 - Size 38e10000 (931904 KB)
0:000> !address -summary


Failed to map Heaps (error 80004005)

--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
<unclassified>                         7171          aab21000 (   2.667 Gb)  90.28%   66.68%
Free                                    637          42ecf000 (   1.046 Gb)           26.14%
Stack                                   603           c900000 ( 201.000 Mb)   6.64%    4.91%
Image                                   636           5c21000 (  92.129 Mb)   3.05%    2.25%
TEB                                     201             c9000 ( 804.000 kb)   0.03%    0.02%
ActivationContextData                    14             11000 (  68.000 kb)   0.00%    0.00%
CsrSharedMemory                           1              5000 (  20.000 kb)   0.00%    0.00%

--- Type Summary (for busy) ------ RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_PRIVATE                            7921          b49c6000 (   2.822 Gb)  95.53%   70.55%
MEM_IMAGE                               665           5e6e000 (  94.430 Mb)   3.12%    2.31%
MEM_MAPPED                               40           28ed000 (  40.926 Mb)   1.35%    1.00%

--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_COMMIT                             5734          9b4d1000 (   2.427 Gb)  82.14%   60.67%
MEM_FREE                                637          42ecf000 (   1.046 Gb)           26.14%
MEM_RESERVE                            2892          21c50000 ( 540.313 Mb)  17.86%   13.19%

--- Protect Summary (for commit) - RgnCount ----------- Total Size -------- %ofBusy %ofTotal
PAGE_READWRITE                         4805          942bd000 (   2.315 Gb)  78.37%   57.88%
PAGE_READONLY                           215           3cbb000 (  60.730 Mb)   2.01%    1.48%
PAGE_EXECUTE_READ                        78           2477000 (  36.465 Mb)   1.21%    0.89%
PAGE_WRITECOPY                           74            75b000 (   7.355 Mb)   0.24%    0.18%
PAGE_READWRITE|PAGE_GUARD               402            3d6000 (   3.836 Mb)   0.13%    0.09%
PAGE_EXECUTE_READWRITE                   80            3b0000 (   3.688 Mb)   0.12%    0.09%
PAGE_EXECUTE_WRITECOPY                   80            201000 (   2.004 Mb)   0.07%    0.05%

--- Largest Region by Usage ----------- Base Address -------- Region Size ----------
<unclassified>                                786000           17d9000 (  23.848 Mb)
Free                                        bc480000          38e10000 ( 910.063 Mb)
Stack                                        6f90000             fd000 (1012.000 kb)
Image                                        3c3c000            ebe000 (  14.742 Mb)
TEB                                         fdf8f000              1000 (   4.000 kb)
ActivationContextData                         190000              4000 (  16.000 kb)
CsrSharedMemory                             7efe0000              5000 (  20.000 kb)
!address 17e0000
!address 45bd0000
!address 6fff0000