9月14日总结

发布时间 2023-09-21 12:57:48作者: lmyyyy

记一次 .NET 某餐饮小程序 内存暴涨分析
一:背景

  1. 讲故事

前些天有位朋友找到我,说他的程序内存异常高,用 vs诊断工具 加载时间又太久,让我帮忙看一下到底咋回事,截图如下:

确实,如果dump文件超过 10G 之后,市面上那些可视化工具分析起来会让你崩溃的,除了时间久之外这些工具大多也不是用懒加载的方式,比如 dotmemory 会把数据全部灌入内存,针对这种dump,你没个32G内存就不要分析了,这也是 windbg 在此类场景下的用武之地。

闲话不多说,朋友的dump到了,赶紧分析一波。
2. 到底是谁吃了内存

还是那句话,用 !address -summary 看下是托管内存还是非托管内存的问题。

0:000> !address -summary

--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
Free 366 7dbf3e6cb000 ( 125.747 TB) 98.24% <unknown> 5970 24099b78000 ( 2.252 TB) 99.97% 1.76%
Stack 159 0136a0000 ( 310.625 MB) 0.01% 0.00% Image 1943 00a2e8000 ( 162.906 MB) 0.01% 0.00%
Heap 89 00a1e0000 ( 161.875 MB) 0.01% 0.00% Other 12 0001da000 ( 1.852 MB) 0.00% 0.00%
TEB 53 00006a000 ( 424.000 kB) 0.00% 0.00% PEB 1 000001000 ( 4.000 kB) 0.00% 0.00%

--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_FREE 366 7dbf3e6cb000 ( 125.747 TB) 98.24% MEM_RESERVE 608 23dfda87000 ( 2.242 TB) 99.52% 1.75%
MEM_COMMIT 7619 2`c3e9e000 ( 11.061 GB) 0.48% 0.01%

从卦中看 ntheap=161M,看样子是托管堆的问题了,继续使用 !eeheap -gc 看下托管堆。

0:000> !eeheap -gc
Number of GC Heaps: 8

Heap 0 (00000277134AD330)