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

使用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操作相关的代码了。

相关文章:

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

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

1282:最大子矩阵

题目: 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 1)子矩阵。 比如,如下4 4的矩阵 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 的最大子矩阵是 9 2 -4 1 -1 8 这个子矩阵的大小是15。 …...

C++编程语言:抽象机制:特殊运算符(Bjarne Stroustrup)

第19章 特殊运算符(Special Operators) 目录 19.1 引言 19.2 特殊运算符(Special Operators) 19.2.1 下标运算符(Subscripting) 19.2.2 函数调用运算符(Function Call) 19.2.3 解引用(Dereferencing) 19.2.4 递增和递减(Increment and Decrement) 19…...

图片无损放大工具Topaz Gigapixel AI v7.4.4 绿色版

Topaz A.I. Gigapixel是这款功能齐全的图象无损变大运用,应用可将智能机拍摄的图象也可以有着专业相机的高质量大尺寸作用。你可以完美地放大你的小照片并大规模打印,它根本不会粘贴。它具有清晰的效果和完美的品质。 借助AIGigapixel,您可以…...

Vue中计算属性computed—(详解计算属性vs方法Methods,包括案例+代码)

文章目录 计算属性computed3.1 概述3.2 使用3.3 计算属性vs方法Methods3.4 计算属性的完整写法 计算属性computed 3.1 概述 基于现有的数据,计算出来的新属性。 依赖的数据变化,自动重新计算 语法: 声明在 computed 配置项中,…...

Python程序设计 内置函数 日志模块

logging(日志) 日志记录是程序员工具箱中非常有用的工具。它可以帮助您更好地理解程序的流程,并发现您在开发过程中可能没有想到的场景。 日志为开发人员提供了额外的一组眼睛,这些眼睛不断关注应用程序正在经历的流程。它们可以存储信息,例…...

中标麒麟v5安装qt512.12开发软件

注意 需要联网操作 遇到问题1:yum提示没有可用软件包问题 终端执行如下命令 CentOS7将yum源更换为国内源保姆级教程 中标麒麟V7-yum源的更换(阿里云源) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Cento…...

每日算法一练:剑指offer——数组篇(3)

1.报数 实现一个十进制数字报数程序,请按照数字从小到大的顺序返回一个整数数列,该数列从数字 1 开始,到最大的正整数 cnt 位数字结束。 示例 1: 输入:cnt 2 输出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,1…...

Java代码说明设计模式

以下是使用 Java 代码分别说明设计模式中的工厂模式、抽象工厂模式(这里推测你可能想说的是抽象工厂模式而非虚拟工厂模式)、建造者模式和观察者模式。 一、工厂模式 工厂模式是一种创建对象的设计模式,它提供了一种创建对象的方式&#xf…...

Golang笔记_day06

一、GMP 调度器 1、调度器理解思路 理解golang的调度器要从进程到协程演进来说明: 进程--->线程--->协程---> golang的协程(goroutine) 从上图可以看出,进程到多线程到协程,最终目的就是为了提高CPU的利用率…...

「从零开始的 Vue 3 系列」:第十一章——跨域问题解决方案全解析

前言 本系列将从零开始,系统性地介绍 Vue 3 的常用 API,逐步深入每个核心概念与功能模块。通过详尽的讲解与实战演示,帮助大家掌握 Vue 3 的基础与进阶知识,最终具备独立搭建完整 Vue 3 项目的能力。 第十一章:跨域问…...

C语言结构体数组 java静动数组及问题

1. (1)先声明,后定义:如上一天 //(2).声明时直接定义 #define N 5 typedef struct student { int num; int score; }STU; int main(void) { STU class3[N] { {10,90},{14,70},{8,95} }; …...

uniapp项目结构基本了解

基本结构的解释 App.vue:应用的根组件,定义全局布局和逻辑。pages/:存放各个页面的 .vue 文件,定义应用的具体页面和功能模块。main.js:应用入口文件,初始化应用,挂载 App.vue。manifest.json&…...

常见Web知识1

List item 常见Web知识1 JSON: JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。它通常用于客户端和服务器之间的数据传输。 JSON 结构 JSON 主要由两…...

新版idea菜单栏展开与合并

新版idea把菜单栏合并了看着很是不习惯,找了半天原来在这里展开 ① 点击文件 -> 设置 ② 点击外观与行为 -> 外观 -> 合并主菜单和窗口标题 然后确定,重启即可...

聊聊Go语言的异常处理机制

背景 最近因为遇到了一个panic问题,加上之前零零散散看了些关于程序异常处理相关的东西,对这块有点兴趣,于是整理了一下golang对于异常处理的机制。 名词介绍 Painc golang的内置方法,能够改变程序的控制流。 当函数调用了pan…...

复习:如何理解 React 中的 fiber

React 中的 Fiber 可以理解为 React 16 引入的一种新的协调(reconciliation)引擎,旨在提高 React 应用的性能和响应性。以下是对 React Fiber 的详细解释: 一、Fiber 的定义与背景 Fiber 是对 React 核心算法的一次重新实现,它将渲染工作分解成一系列小的任务单元,这些任…...

10分钟了解腾讯云混元大模型AIGC系列产品

前言 其实说到AIGC,作为开发者,大家其实已经见怪不怪了,那么AIGC是什么,这里我再简单科普一下。 AIGC的全称是Artificial Intelligence Generated Content (人工智能生成内容)或者说叫生成式人工智能&…...

Unity发送Http

本篇实现在Unity中发送Http请求。 讲解Get,Post,用于在Unity中进行数据对接。 一、Get IEnumerator Get() {string url "";//链接UnityWebRequest request UnityWebRequest.Get(url);//创建UnityWebRequest实例并设置请求方式为Getyield …...

微服务开发-Nacos服务治理

注册中心原理 流程如下: 服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心;调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署);调…...

Z-Image-GGUF开发者案例:集成至内部CMS系统,支持运营人员一键生成Banner

Z-Image-GGUF开发者案例:集成至内部CMS系统,支持运营人员一键生成Banner 1. 项目背景与挑战 想象一下这个场景:你是一家电商公司的运营人员,明天就是“618”大促了,你需要为50个不同的商品制作Banner图。设计团队已经…...

如何用OpenRGB终结RGB灯光控制混乱:终极跨平台解决方案

如何用OpenRGB终结RGB灯光控制混乱:终极跨平台解决方案 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/OpenRGB. Relea…...

5B00,5B01,5B02,1700,1701,1702,1704,P07清零软件G3800,TS3480 ,TS3380 ,G3000,G1810,TS9020, TS8020,TS3480秒修复

下载地址:链接:https://pan.baidu.com/s/1j7Nwv715wX1JL3qidnGyXA?pwd0000 提取码:0000 常见 佳能打印机 型号: G5080 G6080 G7080 G1810 G2810 G3810 G4810 G1800 G2800 G3800 G4800 G5010 G6010 G7010 G1010 G2010 G3010 G4010 G1000 G2000 G3000 G40…...

iOS设备安全定制指南:使用Cowabunga Lite实现零风险个性化配置

iOS设备安全定制指南:使用Cowabunga Lite实现零风险个性化配置 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite iOS系统的封闭性常让用户陷入个性化与安全性的两难选择——越狱虽能…...

3D建模快速上手:零门槛掌握TripoSR AI驱动开源工具

3D建模快速上手:零门槛掌握TripoSR AI驱动开源工具 【免费下载链接】TripoSR 项目地址: https://gitcode.com/GitHub_Trending/tr/TripoSR 在数字创作领域,3D建模曾是专业人士的专属技能,需要掌握复杂的软件操作和几何知识。但今天&a…...

7个技巧彻底改变你的Mac菜单栏体验:Ice终极配置指南

7个技巧彻底改变你的Mac菜单栏体验:Ice终极配置指南 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice Ice是一款强大的macOS菜单栏管理工具,专门帮助用户整理杂乱的菜单栏图标&…...

【esp-idf调试问题-代码为提前配置工程,配网wedsocket服务】

esp-idf调试问题-配网wedsocket服务一、提示分区表错误,没有配置自己的编写的分区表。menuconfig 配置分区表步骤 1:打开配置菜单 在项目根目录执行:步骤 2:选择分区表类型 在 Partition Table → Partition Table 中可选&#xf…...

I2C协议详解:从基础原理到工程实践

1. I2C协议基础与核心设计思想I2C(Inter-Integrated Circuit)总线是Philips公司(现NXP)在1980年代开发的一种同步、半双工串行通信协议。作为嵌入式系统中最常用的总线之一,I2C以其简洁的两线制(SDA数据线S…...

从LAS文件到点云地图:手把手教你用LIO-SAM处理武大WHU-TLS隧道数据集

从LAS文件到点云地图:LIO-SAM处理WHU-TLS隧道数据集的实战指南 隧道场景的点云数据处理一直是SLAM领域的技术难点。武汉大学发布的WHU-TLS Tunnel数据集作为全球最大的地面激光扫描基准数据集之一,其隧道环境数据具有典型的封闭空间特征——长条形结构、…...

解决跨平台资源下载难题:res-downloader高效资源获取工具全解析

解决跨平台资源下载难题:res-downloader高效资源获取工具全解析 【免费下载链接】res-downloader 资源下载器、网络资源嗅探,支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gi…...