日积月累 水滴石穿

.NET内存漏洞排查方法


2023-06-01 12:07:39

微软提供了如下工具:

  • dotnet-counters 检查托管内存的使用情况。
  • dotnet-dump 收集和分析转储文件。 可方便排查内存泄漏情况。

工具安装

  • dotnet tool install --global dotnet-counters
  • dotnet tool install --global dotnet-dump

监控内存状态

  • 启动.net 应用
  • dotnet-counters ps
    之后会出现.net所有进程,第一列是进程id,记下要排查的进程id.如:1234
  • dotnet-counters monitor --refresh-interval 1 -p1234
    发请求或刷新网页,监控内存状态,主要看GC Heap Size (MB) 大小。
    GC Heap Size (MB)在请求时会增长,但停止请求后会回落。频繁请求停止后,该大小没大变化,说明基本没泄涮。

有泄漏后查原因

  • dotnet-dump collect -p 1234
    会提示生成一个xxxxx.dmp文件
  • dotnet-dump analyze xxxxx.dmp
    进入后有命令提示:
  • dumpheap -stat
    会输出heap中所有内存情况,重点排查
  1. 与请求次数接近的内存块
  2. 自己程序中namespace的内存块

更多请参考:微软官方文档