当前位置: 首页 > article >正文

使用dotnet-counters和dotnet-dump 分析.NET Core 项目内存占用问题

在.NET Core 项目部署后,我们往往会遇到内存占用越来越高的问题,但是由于项目部署在Linux上,因此无法使用VS的远程调试工具来排查内存占用问题。那么这篇文章我们大家一起来学习一下如何排查内存占用问题。

首先,我们来看一下应用部署的环境:

操作系统.NET Core版本
Ubuntu 24.046.0

接下来,我们把调试环境配置好。需要安装两个软件:dotnet-countersdotnet-dump。在控制台输入如下命令:

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

dotnet-counters 是一个性能监视工具,用于应用运行状况监视以及简单的性能问题排查。 它可以快速监视 CPU 的使用情况以及 .NET Core 应用程序中引发的异常率。
dotnet-dump 它可以在不调试器代码的情况下收集和分析 操作系统 转储的方法。

一、分析问题

首先,需要获取到应用的进程 pid,然后在控制台输入如下命令:

dotnet-counters monitor -p 进程pid

我们会看到命令行出现了如下信息:

在这里插入图片描述
这些信息展示了内存和CPU的实时使用率,其中有4行信息比较重要:Gen 0 Size (B)、Gen 1 Size (B)、Gen 2 Size (B)以及LOH Size (B)。这四行信息分别表示GC 0代、GC 1代、GC 2代以及大型对象堆所占用的内存大小。
在上图中我们发现 LOH 所占用的内存是最多的,那么我们就需要分析一下 LOH 内部到底在做什么。分析前,我们需要获取应用进程的dump文件,在控制台输入如下命令:

dotnet-dump collect -p 进程pid

这时dotnet-dump 会为我们生成一个dump文件(如下述所示),我们利用这个文件就可以分析了。
在这里插入图片描述

输入如下命令进入分析界面并查看LOH所做全部操作,如下图所示:

// 进入分析界面
dotnet-dump analyze dump文件名

// 打印LOH所作的全部操作
dg LOH

在这里插入图片描述
从打印出来的信息中发现,占用内存最多的就是 rediis,那么我们就来看一下它做了什么,输入如下命令:

dumpheap -mt MT的id

在控制台中打印出了 redis 所作的所有操作,如下图所示:
在这里插入图片描述

我们使用 `do`` 命令来看一下它具体做了哪些操作,结果如下所示:

do Address id

在这里插入图片描述
从输出内容中,我们发现是StackExchange.Redis 中的值类型占用了较大的内存,后续的步骤就是排查和redis操作相关的代码了。


http://www.kler.cn/a/354314.html

相关文章:

  • 跟着逻辑先生学习FPGA-第六课 无源蜂鸣器发声实验
  • Vue2:el-table中的文字根据内容改变颜色
  • 深入讲解 Docker 及实践
  • 基于Python实现的通用小规模搜索引擎
  • 运放输入偏置电流详解
  • 基于高斯混合模型的数据分析及其延伸应用(具体代码分析)
  • C语言如何实现截取字符串
  • 2024大二上js高级+ES6学习10.13(扩展运算符,Array和String的扩展方法,set数据结构)
  • Kubernetes API
  • GNU链接器(LD):ORIGIN、LENGTH函数的用法及实例解析
  • 【实训01】基于视图的访问控制 【实训02】基于角色的访问控制
  • Flythings学习(三)界面交互
  • 【工具变量】上市公司企业广告支出数据(2007-2023年)
  • centors7安装docker启动ubuntu
  • ubuntu 20.04 安装ros1
  • Axure重要元件三——中继器
  • Springboot使用腾讯云短信SDK发送短信
  • JVM 实战篇(一万字)
  • QT--组合框 QComboBox ,微调框 QSpinBox,滑动条 QSlider, 进度条 QProgressBar
  • 结构体通讲——数据结构解惑
  • 在线考试系统的现代化解决方案:Spring Boot与JavaWeb
  • 【系统集成中级】OSI 七层模型
  • web前端面试中拍摄的真实vue面试题
  • 考研论坛设计小程序ssm+论文源码调试讲解
  • 设计一个支持自动化测试执行的测试框架
  • 盘古信息:智能仓储管理赋能企业降本增效