.netcore 内存分析手把手教学 超实用

现象

随着程序运行,内存占用率越来越高,直到触发linux的OOM,程序被杀死。

1.工具安装

.netcore安装这里就不叙述

分析工具:dotnet-counters, dotnet-dump

转储收集和分析实用工具 (dotnet-dump)
dotnet tool install --global dotnet-dump
调查性能计数器 (dotnet-counters)
dotnet tool install --global dotnet-counters

工具的安装见:https://docs.microsoft.com/zh-cn/dotnet/core/diagnostics/dotnet-counters

分析过程

1.获取要分析进程的pid

任务管理器-->详细信息-->找到你程序的PID:比如18924

2,查看内存使用情况(我这里pid为18924)

dotnet-counters monitor -p 18924

从结果来看,GC中的Gen2占用了较多的内存,理论上,不应该有很多的Gen2,我们需要分析一下Gen2里面到底是什么?

Gen0,Gen1,Gen2以及LOH的区别,以及.net core内存管理机制,见:

Memory management and patterns in ASP.NET Core | Microsoft Learn

3,获取进程的dump文件

新开个cmd 运行如下命令

dotnet-dump collect -p 18924

说明:要使用这条命令获取dump,如果在docker中,需要提供docker的--private参数,如果是在AWS的ECS中使用的Fargate模式运行,则不支持此参数。需要在EC2上运行

此命令会在当前目录生成一个dump文件。

4,分析dump文件


dotnet-dump analyze dump_20240223_091017.dmp
# 分析gen2中的内容,每个命令的参数以及和含义,可以使用help查看
然后在执行如下命令
dg gen2

 从结果来看,有很多string类型的数据在gen2中,以及mysql的一些数据,我们打开看看具体是什么内容,执行如下命令

格式如: dumpheap -mt上图的的一串代码
dumpheap -mt 00007ffe7b2069b8

接下来  我们分析最后一个  

再执行do命令查看该string在哪个位置产生的

do 01fffd711038

结果如图依次类推 查其他的情况

微软原版教程:调试内存泄漏教程 - .NET | Microsoft Learn

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值