netcore项目Linux,docker部署内存分析

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

工具的安装

2.获取要分析进程的pid

使用top或者ps等等工具,获取程序的pid

对于docker环境,如果没有安装top命令,可以使用如下安装

apt-get install procps

3.查看内存使用情况(我这里pid为13156)

dotnet-counters monitor -p 13156

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

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

添加链接描述

4.获取进程的dump文件

dotnet-dump collect -p 13156

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

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

5.分析dump文件

dotnet-dump analyze core_20210510_054712
# 分析gen2中的内容,每个命令的参数以及和含义,可以使用help查看
dg gen2

在这里插入图片描述
从结果来看,有很多string类型的数据在gen2中,以及mysql的一些数据,我们打开看看具体是什么内容。

在这里插入图片描述
看输出,有很多一样的内容,我们随便打开一个看看

在这里插入图片描述
可以看到内容就是数据库的返回数据

在这里插入图片描述
同样的方法,我们看看哪些string里面都是什么

在这里插入图片描述
有非常多的对象,我们也是随便打开一个看看内容

在这里插入图片描述
看着像是web的打印

在这里插入图片描述
总结

获取dump文件

dotnet-dump collect

分析dump文件

dotnet-analyze xxxxx

获取gen2或者其他的内存数据

dg gen2 | gen1 | gen1 | genloh

查看内存数据类型

dumpheap -mt xxxxxx

查看内存数据的具体内容

do xxxxxx

通过具体内容,配合开发人员定位代码问题。

参考文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值