使用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.mzph.cn/diannao/57014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机数据恢复技巧:适用于手机的恢复应用程序

发现自己意外删除了 Android 设备上的照片,这让人很痛苦。这些照片可能是值得纪念的文件,会让您想起一些难忘的回忆。删除它们后,您知道如何恢复它们。在这种情况下,您需要使用 Android 的照片恢复应用程序。 无论您需要直接从 A…

【控制系统】深入理解反步控制(Backstepping) | 反步法控制器原理与应用实例解析(附Matlab/Simulink仿真实现)

💯 欢迎光临清流君的博客小天地,这里是我分享技术与心得的温馨角落 💯 🔥 个人主页:【清流君】🔥 📚 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 📚 🌟始终保持好奇心&…

使用Airtest自动化某云音乐爬取歌曲名称

简介 本文将介绍如何使用Airtest自动化工具来模拟用户操作,从某云音乐中爬取与特定关键词相关的歌曲名称。我们将以搜索“文字”相关的歌曲为例,并将结果保存到本地文件。 准备工作 安装Airtest并配置好Android设备或模拟器。确保你的设备上已安装某云…

【独家:AI编程助手Cursor如何revolutionize Java设计模式学习】

【独家:AI编程助手Cursor如何revolutionize Java设计模式学习】 导语 在Java高级编程的世界里,设计模式是每个开发者必须掌握的利器。但是,如何快速理解并灵活运用这些模式呢?让我们一起探索如何借助AI编程助手Cursor,轻松掌握设计模式,提升Java编程技能! 正文 设计模式:J…

QUIC(Quick UDP Internet Connections)与 RTMP(Real Time Messaging Protocol)

QUIC(Quick UDP Internet Connections)和 RTMP(Real Time Messaging Protocol)是两种不同的网络传输协议,它们在一些方面有不同的特点和应用场景。 QUIC 协议 特点 基于 UDP:QUIC 建立在 UDP 之上&#xff…

探索 Jupyter 核心:nbformat 库的神秘力量

文章目录 探索 Jupyter 核心:nbformat 库的神秘力量1. 背景介绍:为何选择 nbformat?2. nbformat 是什么?3. 如何安装 nbformat?4. 简单的库函数使用方法4.1 读取 Notebook 文件4.2 修改 Notebook 中的单元格4.3 添加 M…

灵当CRM index.php 任意文件上传漏洞复现

0x01 产品描述: 灵当CRM是一款专为中小企业量身定制的智能客户关系管理工具,由上海灵当信息科技有限公司开发和运营。该系统广泛应用于多个行业,包括金融、教育、医疗、IT服务及房地产等领域,旨在满足企业对客户个性化管理的需求&…

【2024版】sql-liabs靶场前十关解题过程和思路----适合入门小白

在你们看到这个靶场之前,你们可以先去听一下课,然后再来做这个靶场你们的感悟就会比较深,当你听过课再来做就不会觉得这么懵了,重庆橙子科技-sql注入,我之前学习是听的他的课,我觉得是全网讲的最好的一个师…

vue2使用pdfjs-dist实现pdf预览(iframe形式,不修改pdfjs原来的ui和控件,dom层可以用display去掉一部分组件)

前情提要 在一开始要使用pdf预览的时候,第一次选的是vue-pdf,但是vue-pdf支持的功能太少,缺少了项目中需要的一项-复制粘贴功能 之后我一顿搜搜搜,最终貌似只有pdfjs能用 但是网上支持text-layer的貌似都是用的2.09那个版本。 使…

MySQL同步到ES的方案选型

文章目录 1. 同步双写优点缺点实现方式 2. 异步双写优点缺点实现方式 3. 另起应用 SQL 查询写入优点缺点实现方式 4. Binlog 实时同步优点缺点实现方式 5. 应用场景 本文参考: https://www.bilibili.com/video/BV13hvZeaErr/?vd_sourceb7e4d17fd13ffa91c4da6d37c08a6c7c 最近在…

【题解】—— LeetCode一周小结42

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结41 14.鸡蛋掉落 题目链接:887. 鸡蛋掉落 给你 k 枚…

c++迷宫游戏

1、问题描述 程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向健操纵老鼠在规定的时间内走到粮仓处。 基本要求: 老鼠形象可以辨认,可用键盘操纵老鼠上下左右移动;迷宫的墙足够结…

Springboot指定扫描路径

方式一:通过在启动类的SpringbootApplication中指定包扫描或类扫描 指定需要扫描的包 scanBasePackages{"待扫描包1","待扫描包2", . . . ," "} 指定需要扫描的类 scanBasePackageClasses{类1.class,类2.class,...} 方式二&#xff…

C语言函数实现:深入理解strcpy

文章目录 一、strcpy函数的基本用法二、strcpy函数的实现原理三、strcpy函数的应用场景四、strcpy函数的安全性问题五、结论 C语言函数实现:深入理解strcpy 在C语言编程中,字符串处理是一项基础且重要的任务。 strcpy函数作为C标准库中的一个基本函数&a…

CDC变更数据捕捉技术是什么?和ETL有什么不同?

一、什么是CDC技术? 变更数据捕获(Change Data Capture,简称 CDC)是一种用于识别和跟踪数据源中发生变化的数据的技术。 工作原理: 1.监测数据源:CDC 工具会持续监测指定的数据源,如数据库表、文件系统…

【C++复习】经典笔试题

文章目录 八大排序快排过程 卡特兰数反转链表链表的回文结构左叶子之和另一棵树的子树归并排序类与对象编程训练杨辉三角字符串乘积二叉树前序遍历成字符串数组的交集二叉树的非递归前序遍历连续子数组的最大乘积 八大排序 插冒归稳定 快排过程 以 [3,4,6,1,2,4,7] 为例&#…

MySQL 聚合函数

1. AVG函数求平均值 以 teacher 表为例,先查所有 teacher 信息: SELECT * FROM teacher;查询结果如下图: 可以使用 AVG() 函数求出全部教师平均年龄: SELECT AVG(age) FROM teacher;执行结果如下图: Tips&#…

Javascript 脚本查找B站限时免费番剧

目录 前言 脚本编写 脚本 前言 B站的一些番剧时不时会“限时免费”,白嫖党最爱,主打一个又占到便宜的快乐。但是在番剧索引里却没有搜索选项可以直接检索“限时免费”的番剧,只能自己一页一页的翻去查看,非常麻烦。 自己找限…

如何修改MAC地址破解网络无线网络限制-担心别人蹭网,路由器设置MAC地址过滤,限定了能访问无线网络的网卡地址-供大家学习参考

路由器都设置了MAC地址过滤,也就是限定了能访问无线网络的网卡的MAC地址。因为无线路由器不一定由自己控制,所以当更换了笔记本或者更换了无线网卡的时候,也许就上不了网了。我们可以修改网卡的MAC地址实现上网。 下载:https://do…

各种查询sql介绍

1. 关联查询(JOIN) 关联查询用于从多个表中检索数据。它基于两个或多个表之间的共同字段(通常是主键和外键)来组合数据。 内连接(INNER JOIN): sql SELECT a.name, b.order_date FROM custome…