『性能调优』在生产环境中,.Net如何定位系统内存泄露具体位置

简介: 📣读完这篇文章里你能收获到 - 生产环境排查内存问题的工具 - 排查命令的使用- 排查经验分享

请添加图片描述
📣读完这篇文章里你能收获到

  • 生产环境排查内存问题的工具
  • 排查命令的使用
  • 排查经验分享

请添加图片描述

一、前提条件

  • 定位环境:生产环境
  • .NET Core 3.1 SDK 或更高版本。
  • dotnet-counters 检查托管内存的使用情况。
  • dotnet-dump 收集和分析转储文件。

请添加图片描述

二、排查步骤

1. 项目准备

  1. 创建内存溢出的项目

2. dotnet-counters准备

  1. 先安装dotnet-counters

    dotnet tool install --global dotnet-counters

在这里插入图片描述

  1. 然后找到进程编号

    dotnet-counters ps
    在这里插入图片描述

  2. 然后监视进程

    dotnet-counters monitor --refresh-interval 1 -p 10232 (进程编号)
    在这里插入图片描述

  3. 最后查看显示统计信息

    找到 GC Heap Size 。然后统计这个程序的增长,为了找出内存泄露的代码

在这里插入图片描述
在这里插入图片描述

3. dotnet-dump准备

  1. 先安装dotnet-counters

    dotnet tool install --global dotnet-dump
    在这里插入图片描述

  2. 然后生成转储文件(内存文件)

    dotnet-dump collect -p 10232 (进程编号)

在这里插入图片描述

  1. 然后分析转储文件

    dotnet-dump analyze dump_20210825_225811.dmp(转储文件名)
    在这里插入图片描述

请添加图片描述

三、结果分析

1. 找到内存比较大的类型,通过查看内存占用大小和对象数量

dumpheap -stat
在这里插入图片描述
直接拉到最下面,看最大的对象
在这里插入图片描述

2. 然后分析类型具体对象

dumpheap -mt 00007ffe88612360 为类型编号
在这里插入图片描述

3. 然后找出的应用根(目的是找出在哪里被引用了)

gcroot -all 000002c054600480 对象编号
随便找一个引用,以最后一个来看

在这里插入图片描述

到这一步已经可以排查出是Employee里边导致的,接着排查代码

在这里插入图片描述

这里数据没能GC回收是由于对象的运行时间比析构队列的长导致GC无法回收,实际上可能有其他稀奇古怪的各种原因,定位到代码以后剩下的都好排查了

相关文章
|
存储 Java iOS开发
“.NET研究”在iPhone应用中如何避免内存泄露
  我们曾经对iPhone的内存管理做过比较深入的报道,如何有效控制iPhone内存管理的对象的所有权与引用计数和以及iPhone内存的自动释放与便捷方法。本文我们将介绍在iPhone应用中如何避免内存泄露。
689 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
47 0
|
19天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
22 0
|
2月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
32 0
|
2月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
2月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
120 5
|
4月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
32 0
|
4月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
128 0