如何通过.NET Windbg定位并解决某妇产医院WPF系统内存溢出问题?

2026-03-30 10:211阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计750个文字,预计阅读时间需要3分钟。

如何通过.NET Windbg定位并解决某妇产医院WPF系统内存溢出问题?

目录一:背景

1.讲述故事

二:Windbg 分析

1.为什么会内存溢出

2.探索溢出原因

3.如何突破2G限制

三:总结一:背景

1.讲述故事

上月,一位朋友找到我,说他的程序出现内存溢出。

目录
  • 一:背景
    • 1. 讲故事
  • 二:Windbg 分析
    • 1. 为什么会内存溢出
    • 2. 探索溢出原因
    • 3. 如何突破 2G 限制
  • 三:总结

    一:背景

    1. 讲故事

    上个月有位朋友找到我,说他的程序存在内存溢出情况,寻求如何解决。

    要解决还得通过 windbg 分析啦。

    二:Windbg 分析

    1. 为什么会内存溢出

    大家都知道内存溢出对应着 .NET 中的OutOfMemoryException异常,这种异常有可能是托管代码手工抛出的,也有可能是CLR层面抛出的,言外之意就是可以通过两种方式排查。

    • 托管线程是否挂载着异常?

    0:000> !t ThreadCount: 23 UnstartedThread: 0 BackgroundThread: 5 PendingThread: 0 DeadThread: 17 Hosted Runtime: no Lock ID OSID ThreadOBJ State GC Mode GC Alloc Context Domain Count Apt Exception 0 1 362c 00fac868 26020 Preemptive 7ED701A0:00000000 00fa6b60 0 STA 5 2 2d70 00fbeba0 2b220 Preemptive 7EBA7AC0:00000000 00fa6b60 0 MTA (Finalizer) 7 3 3264 061c8890 102a220 Preemptive 00000000:00000000 00fa6b60 0 MTA (Threadpool Worker) 17 15 3f98 19682b90 202b220 Preemptive 7EBB0830:00000000 00fa6b60 0 MTA XXXX 16 0 2845fb00 35820 Preemptive 00000000:00000000 00fa6b60 0 Ukn 18 14 a7c 2842b1c8 202b220 Preemptive 00000000:00000000 00fa6b60 0 MTA XXXX 6 0 2c9b3778 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 18 0 288a1318 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 23 0 288a22f0 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 10 0 2ccf3550 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 21 0 288a1860 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 12 0 288a1da8 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 11 0 2c993640 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 8 0 2ccf3a98 35820 Preemptive 00000000:00000000 00fa6b60 0 Ukn XXXX 9 0 2ccf2030 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 7 0 2c9aed88 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 26 0 28898308 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 25 0 2c492c68 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 4 0 2c993b88 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 20 0 2c9af2d0 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 17 0 2c9afd60 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 24 0 2c9b1280 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) 23 22 2658 2c9b02a8 1029220 Preemptive 7ED5BFF8:00000000 00fa6b60 0 MTA (Threadpool Worker)

    从输出信息看,这些线程并没有挂载任何托管异常,我去。。。

    如何通过.NET Windbg定位并解决某妇产医院WPF系统内存溢出问题?

    • 是否在 CLR 上抛出

    这主要是看托管堆(heap)上的内存分配或者gc回收造成的内存不足,可以用!ao命令。

    0:000> !ao There was no managed OOM due to allocations on the GC heap

    从输出信息看也没有任何异常,尴尬了

    本文共计750个文字,预计阅读时间需要3分钟。

    如何通过.NET Windbg定位并解决某妇产医院WPF系统内存溢出问题?

    目录一:背景

    1.讲述故事

    二:Windbg 分析

    1.为什么会内存溢出

    2.探索溢出原因

    3.如何突破2G限制

    三:总结一:背景

    1.讲述故事

    上月,一位朋友找到我,说他的程序出现内存溢出。

    目录
    • 一:背景
      • 1. 讲故事
    • 二:Windbg 分析
      • 1. 为什么会内存溢出
      • 2. 探索溢出原因
      • 3. 如何突破 2G 限制
    • 三:总结

      一:背景

      1. 讲故事

      上个月有位朋友找到我,说他的程序存在内存溢出情况,寻求如何解决。

      要解决还得通过 windbg 分析啦。

      二:Windbg 分析

      1. 为什么会内存溢出

      大家都知道内存溢出对应着 .NET 中的OutOfMemoryException异常,这种异常有可能是托管代码手工抛出的,也有可能是CLR层面抛出的,言外之意就是可以通过两种方式排查。

      • 托管线程是否挂载着异常?

      0:000> !t ThreadCount: 23 UnstartedThread: 0 BackgroundThread: 5 PendingThread: 0 DeadThread: 17 Hosted Runtime: no Lock ID OSID ThreadOBJ State GC Mode GC Alloc Context Domain Count Apt Exception 0 1 362c 00fac868 26020 Preemptive 7ED701A0:00000000 00fa6b60 0 STA 5 2 2d70 00fbeba0 2b220 Preemptive 7EBA7AC0:00000000 00fa6b60 0 MTA (Finalizer) 7 3 3264 061c8890 102a220 Preemptive 00000000:00000000 00fa6b60 0 MTA (Threadpool Worker) 17 15 3f98 19682b90 202b220 Preemptive 7EBB0830:00000000 00fa6b60 0 MTA XXXX 16 0 2845fb00 35820 Preemptive 00000000:00000000 00fa6b60 0 Ukn 18 14 a7c 2842b1c8 202b220 Preemptive 00000000:00000000 00fa6b60 0 MTA XXXX 6 0 2c9b3778 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 18 0 288a1318 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 23 0 288a22f0 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 10 0 2ccf3550 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 21 0 288a1860 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 12 0 288a1da8 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 11 0 2c993640 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 8 0 2ccf3a98 35820 Preemptive 00000000:00000000 00fa6b60 0 Ukn XXXX 9 0 2ccf2030 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 7 0 2c9aed88 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 26 0 28898308 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 25 0 2c492c68 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 4 0 2c993b88 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 20 0 2c9af2d0 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 17 0 2c9afd60 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) XXXX 24 0 2c9b1280 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) 23 22 2658 2c9b02a8 1029220 Preemptive 7ED5BFF8:00000000 00fa6b60 0 MTA (Threadpool Worker)

      从输出信息看,这些线程并没有挂载任何托管异常,我去。。。

      如何通过.NET Windbg定位并解决某妇产医院WPF系统内存溢出问题?

      • 是否在 CLR 上抛出

      这主要是看托管堆(heap)上的内存分配或者gc回收造成的内存不足,可以用!ao命令。

      0:000> !ao There was no managed OOM due to allocations on the GC heap

      从输出信息看也没有任何异常,尴尬了