前置准备
1.底包必须是sdk
2.一台已经安装好kubectl的主机,并能连接上k8s

一、隔离问题pod

  1. kubectl label pod $podname -n $namespace app=$newname --overwrite

示例:kubectl label pod next-gateway-5f85d494f5-l8hdq -n dev-next-erp-base app=next-gateway1 —overwrite

二、安装工具

进入docker,安装dump工具

  1. dotnet tool install -g dotnet-dump
  2. dotnet tool install -g dotnet-counters

三、dump内存

进入docker,执行以下命令,会返回dump出来的文件名

  1. dotnet-dump collect -p 1

四、复制文件到分析机器

  1. kubectl cp $podname:/tmp/dump.dmp dump.dmp -n $namesapce

示例:kubectl cp next-sso-d9f44c47d-c7qfd:/app/core_20210319_180057 ../tmp/core_20210319_180057 -n df-test-next-erp-002-02

五、分析机器准备

1.安装sdk

安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库。 打开终端并运行以下命令:

  1. rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

安装sdk

  1. yum install dotnet-sdk-5.0

2.安装分析工具

  1. dotnet tool install --global dotnet-dump

六、分析

1.VS分析托管内存

a.文件拖入vs,选择【调试托管内存】,如下图:
image.png
b.运行后生成一个【堆视图】窗口,就可以查看内存信息
image.png

2.dotnet-dump工具分析

开始分析

  1. dotnet-dump analyze <dump_path> [-h|--help] [-c|--command]

参考官方文档

转储收集和分析实用工具 (dotnet-dump)
教程:调试 .NET Core 中的内存泄漏