windows - windbg 内存泄漏调查 - 缺少堆内存

标签 windows memory memory-leaks windbg

我正在使用 windbg 调查 Windows 应用程序中的缓慢内存泄漏

!heap -s 给出以下输出

          Heap     Flags   Reserv  Commit  Virt   Free  List   UCR  Virt  Lock  Fast 
                            (k)     (k)    (k)     (k) length      blocks cont. heap 
-------------------------------------------------------------------------------------
00000023d62c0000 08000002 1182680 1169996 1181900  15759  2769    78    3   2b63   LFH
00000023d4830000 08008000      64      4     64      2     1     1    0      0      
00000023d6290000 08001002    1860    404   1080     43     7     2    0      0   LFH
00000023d6dd0000 08001002   32828  32768  32828  32765    33     1    0      0      
    External fragmentation  99 % (33 free blocks)
00000023d8fb0000 08001000   16384   2420  16384   2412     5     5    0   3355      
    External fragmentation  99 % (5 free blocks)
00000023da780000 08001002      60      8     60      5     2     1    0      0      
-------------------------------------------------------------------------------------

这表明地址为 00000023d62c0000 的堆有超过 1 GB 的保留内存。

接下来我运行命令 !heap -stat -h 00000023d62c0000

 heap @ 00000023d62c0000
group-by: TOTSIZE max-display: 20
    size     #blocks     total     ( %) (percent of total busy bytes)
    30 19b1 - 4d130  (13.81)
    20 1d72 - 3ae40  (10.55)
    ccf 40 - 333c0  (9.18)
    478 8c - 271a0  (7.01)
    27158 1 - 27158  (7.00)
    40 80f - 203c0  (5.78)
    410 79 - 1eb90  (5.50)
    68 43a - 1b790  (4.92)
    16000 1 - 16000  (3.94)
    50 39e - 12160  (3.24)
    11000 1 - 11000  (3.05)
    308 54 - fea0  (2.85)
    60 28e - f540  (2.75)
    8018 1 - 8018  (1.43)
    80 f2 - 7900  (1.36)
    1000 5 - 5000  (0.90)
    70 ac - 4b40  (0.84)
    4048 1 - 4048  (0.72)
    100 3e - 3e00  (0.69)
    48 c9 - 3888  (0.63)

如果我将上述命令中堆 block 的总大小加起来 (4d130 + 3ae40 + ...),我会得到几兆字节的分配内存。

我是不是漏掉了什么?我如何找到哪些 block 正在消耗 GB 的已分配堆内存?

最佳答案

我相信 !heap –stat 对于 64 位转储是坏的,至少是大转储。我改用 debugdiag 1.2 来寻找 64 位内存泄漏。

关于windows - windbg 内存泄漏调查 - 缺少堆内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831173/

相关文章:

windows - 在 Emacs 中重新排列文件名

memory - 可寻址和可移动的最小存储单元

macos - NSImage TIFFRepresentation 未随 ARC 一起发布

android - 如何使用探查器查找内存泄漏

python - 使用 scipy interpolate griddata 方法重新网格化数据时出现意外的内存错误

windows - "traditional"COM 和 COM+ 之间的区别(在组件服务中)

php - TCPDF - 如何使打印速度更快?非常非常慢,1320条记录花了40分钟

windows - Azure 角色本地存储是否保证下一个使用同一主机的应用程序无法访问?

java - Android 相机应用程序无法正确显示图像

flash - 为什么Flash要乘以8?