『性能调优』在生产环境中,.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无法回收,实际上可能有其他稀奇古怪的各种原因,定位到代码以后剩下的都好排查了

相关文章
|
4天前
|
存储 开发框架 .NET
"揭秘.NET内存奥秘:从CIL深处窥探值类型与引用类型的生死较量,一场关于速度与空间的激情大戏!"
【8月更文挑战第16天】在.NET框架中,通过CIL(公共中间语言)可以深入了解值类型与引用类型的内存分配机制。值类型如`int`和`double`直接在方法调用堆栈上分配,访问迅速,生命周期随栈帧销毁而结束。引用类型如`string`在托管堆上分配,堆栈上仅存储引用,CLR负责垃圾回收,确保高效且自动化的内存管理。
17 6
|
22天前
|
存储 安全 数据库
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
阿里云服务器ECS计算型、通用型、内存型规格族属于独享型云服务器,在高负载不会出现计算资源争夺现象,因为每一个vCPU都对应一个Intel ® Xeon ®处理器核心的超线程,具有性能稳定且资源独享的特点。本文为大家整理汇总了阿里云服务器ECS计算型、通用型、内存型主要实例规格族具体实例规格有哪些,各个实例规格的性能特点和主要适用场景。
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
|
4天前
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
|
19天前
|
存储 机器学习/深度学习 算法
Adam-mini:内存占用减半,性能更优的深度学习优化器
论文提出一种新的优化器Adam-mini,在不牺牲性能的情况下减少Adam优化器的内存占用。
62 10
Adam-mini:内存占用减半,性能更优的深度学习优化器
|
4天前
|
敏捷开发 设计模式 开发者
【揭秘终极利器】AgileEAS.NET:服务定位器模式的魔法,如何让企业级软件开发瞬间提速?揭秘背后的技术奥秘与实战指南!
【8月更文挑战第16天】AgileEAS.NET是基于DotNet的企业级敏捷开发平台,其服务定位器模式助力构建高度解耦系统。通过全局服务目录动态查找服务,避免硬编码依赖。在AgileEAS.NET中,服务定位器以静态类形式封装服务注册与检索功能。示例展示了如何注册与获取服务实例,如在`UserController`中通过服务定位器使用`IUserService`。此模式整合到框架生命周期管理,便于各处获取服务实例,提升开发效率。然而,应适度使用并考虑依赖注入容器以增强代码可维护性和可测试性。
14 4
|
4天前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
4天前
|
缓存 开发框架 .NET
看看 Asp.net core Webapi 项目如何优雅地使用内存缓存
看看 Asp.net core Webapi 项目如何优雅地使用内存缓存
|
15天前
|
监控 算法 Java
Java 内存管理:从垃圾收集到性能调优
【8月更文挑战第5天】 本文将深入探讨 Java 的内存管理机制,特别是垃圾收集器(GC)的工作原理及其在性能优化中的关键作用。通过具体案例分析,我们将了解如何选择合适的垃圾收集算法以及调优 JVM 参数来提升应用性能。文章旨在为 Java 开发者提供实用的内存管理和性能调优技巧,帮助他们编写更高效、更稳定的应用程序。
36 3
|
20天前
|
运维 Java Linux
(九)JVM成神路之性能调优、GC调试、各内存区、Linux参数大全及实用小技巧
本章节主要用于补齐之前GC篇章以及JVM运行时数据区的一些JVM参数,更多的作用也可以看作是JVM的参数列表大全。对于开发者而言,能够控制JVM的部分也就只有启动参数了,同时,对于JVM的性能调优而言,JVM的参数也是基础。
|
16天前
|
弹性计算 固态存储 ice
阿里云服务器ECS内存型r8i、通用算力u1、r7、AMD内存r8a、高主频内存hfr8i价格和性能差异
2024年阿里云提供2核16G、4核32G及8核64G等多种服务器配置,用户可根据需求选择不同实例规格如内存型r8i、通用算力型u1等。以华北2(北京)为例,2核16G月费从286.2元起,4核32G从572.4元起,8核64G则从1144.8元起。公网带宽1Mbps预付费为23元/月,系统盘如ESSD PL1按量计费0.0021元/小时/GiB。具体价格与折扣请参考阿里云官网。