前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分析.NET Dump原来这么简单,你也快来试试吧!

分析.NET Dump原来这么简单,你也快来试试吧!

作者头像
老张的哲学
发布于 2024-03-12 10:22:54
发布于 2024-03-12 10:22:54
84800
代码可运行
举报
文章被收录于专栏:NetCore 从壹开始NetCore 从壹开始
运行总次数:0
代码可运行

我相信,只要代码写到足够多的时候,就肯定会遇到足够的BUG和难题,常见有错误日志的还是比较简单的,最让人头疼的就是OOM,内存溢出,各种重启,内存居高不下等等疑难杂症。 今天正好看到一篇文章说到了分析dump的,流程很简单,今天用BlogCore项目给大家分享下过程,全程看完只需要五分钟,自己动手只需要十分钟,十五分钟后,分析.net内存爆炸问题,你就入门了。今天演示的是在win10本地,在其他OS平台上是一样的。

现在,我们运行任意ASP.NetCore项目,这里用BlogCore举例,启动好后,噼里啪啦一顿点击操作,然后就开始了今天的故事。

1、安装dump工具

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dotnet tool install --global dotnet-dump

很简单,直接执行这句命令就行了。当然,本地也是需要安装sdk的,没有sdk也不太好运行项目。

2、收集dump文件

项目启动后,一顿操作,就是为了触发系统运行所带来的各种情况,比如内存的变化,GC的处理等等。

先查看我们项目端口所在的PID

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
netstat -ano | findstr "LISTENING" | findstr ":9291"

然后开始收集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dotnet-dump collect -p 19524

这个时候,就会看到dmp文件就出现了

3、分析dump文件

现在到了重头戏,有了dmp文件,开始分析了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dotnet dump analyze c:\xx\x\xxxx.dmp

现在进入分析流程,先查一下GC堆栈信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eeheap -gc

可以清晰地看到有几个GC堆,可以对大小进行过滤,比如说只看1M以上的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dumpheap -stat -min 1024000

这里显示,一共有两个objects,一共才3M多,这完全没有看的必要。 同时也能证明,BlogCore启动的时候,就是比较轻量,没啥大内存。

4、手动内存爆炸

为了达到很好的分析效果,咱们在BlogCore的登录接口,随便写个死循环,大内存的往里灌试试。

启动项目,一顿操作,访问这个api接口,看到内存瞬间就炸了,1.7G,还一直在GC,这下子有用了。

还是重复第三步的内容,生成dmp文件,分析dmp文件,查看GC堆,

这下很直观了,一共五个超过1M的,共524M左右,类是Byte数组,聪明的你是不是已经发现了其中猫腻

继续操作,找字节数组都有哪些

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dumpheap -type System.Byte[]

随便找一个比较大的,就是这个027ad4c00048,看一下这个对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dumpobj 027ad4c00048

没看到很明显的东西,再执行命令,查看引用情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gcroot 027ad4c00048

可以看到具体的Thread号和引用地址,是不是一目了然,我相信看到这里,基本上就能猜出来七七八八了吧,毕竟地址都给你了,就是LoginController的GetJwtToken3方法。

当然,也可以看看具体这个线程对应的线程数,用threads命令即可

看到了这里,基本已经破案了,

打完收工,建议大家动手练习起来,为以后储备技术栈,当然还有更高级的玩法,有想学或者想了解的,欢迎下边评论。

参考文章: https://www.cnblogs.com/myzony/p/18061108/troubleshooting-memory-surge-issues-in-dotnet-core-applications

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NetCore 从壹开始 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
调试 .NET Core 中的内存泄漏
当应用引用不再需要执行所需任务的对象时,可能会发生内存泄漏。 引用上述对象会使垃圾回收器无法回收所使用的内存,这通常会导致性能降低,并可能最终引发 OutOfMemoryException。
呆呆
2022/01/09
1.8K0
centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)
lldb工具的安装,linux下netcore如何生成dump文件,查看下文 centos7使用lldb调试netcore应用转储dump文件
旺财的城堡
2018/11/20
2K1
WinDbg调试.NET程序入门
俗话说:万事开头难! 自从来到新公司遇到性能问题后,需要想办法解决这个问题,但是一直没有合适的性能分析工具,然后找到StevenChennet 大神帮忙,他用WinDbg工具远程帮我分析了一个 dump文件,但是只看到键盘 “啪啪啪”,得到了结果,却不是很清楚WinDbg神奇具体如何使用的。结果,第二天,性能问题又来了,总不能每次劳烦大神驾到,所以不得不自己开始学习WinDbg,这里记录一个入门过程。 1,首先,下载并安装WinDbg程序 从下面的地址打开: https://msdn.microsoft.c
用户1177503
2018/02/26
1.9K0
.NET Core CLI 的性能诊断工具介绍
开发人员的.NET Core项目上线后,经常会出现各种问题,内存泄漏,CPU 100%,处理时间长等, 这个时候就需要快速并准确的发现问题,并解决问题, 除了项目本身的日志记录外,NET Core 为我们开发人员提供了一系列功能强大并且无侵入的诊断工具,本文主要介绍的是 .NET Core dotnet 诊断全局工具
全球技术精选
2021/01/08
1.6K0
.NET Core CLI 的性能诊断工具介绍
【.NET】通过代码实现导出进程的dump文件和内存分析
因为需要获取进程的processID,所以接着上次写的识别.NET进程的控制台程序【参考检测.NET CORE+和.NET FX进程有关那个文章】,直接在这上面新增功能。
Wesky
2024/08/13
2220
【.NET】通过代码实现导出进程的dump文件和内存分析
.NET应用程序调试—原理、工具、方法
该篇文章主要分享了作者在使用.NET进行应用程序调试方面的一些经验和技巧,包括异常处理、调试工具、代码调试、性能优化、内存泄漏检测、远程调试、日志记录、死锁、线程调试、Visual Studio调试、F5负载均衡和服务器端应用程序等方面的内容。作者还介绍了如何使用Visual Studio调试.NET应用程序,并提供了详细的步骤和截图。此外,作者还介绍了一些常用的.NET调试工具,如Fiddler、Wireshark、Process Monitor等,以及如何使用这些工具进行网络调试、进程监控、文件读写等方面的操作。最后,作者还分享了一些调试.NET应用程序的经验和技巧,包括如何识别和解决死锁、内存泄漏、性能问题等。
王清培
2018/01/08
1.3K0
.NET应用程序调试—原理、工具、方法
调试 .NET Core 中的高 CPU 使用率
本教程将介绍如何调试 CPU 使用率过高的情况。 使用提供的示例 ASP.NET Core Web 应用 源代码存储库,可以故意造成死锁。 终结点将停止响应并遇到线程累积问题。 你将了解如何使用各种工具,通过几条关键的诊断数据诊断此情况。
呆呆
2022/01/09
1.3K0
糟糕,线上OOM了该怎么办,JVM heap dump快速分析
在故障定位(尤其是out of memory)和性能分析的时候,经常会用到一些文件辅助我们排除代码问题。这些文件记录了JVM运行期间的内存占用、线程执行等情况,这就是我们常说的dump文件。常用的有heap dump和thread dump(也叫javacore,或java dump)。我们可以这么理解:heap dump记录内存信息的,thread dump记录CPU信息。
架构师修炼
2020/07/20
7K0
糟糕,线上OOM了该怎么办,JVM heap dump快速分析
新系统上线如何规划机器容量
任何新的业务系统在上线以前都需要去估算服务器配置和 JVM 的内存参数,这个容量与资源规划并不仅仅是系统架构师的随意估算的,需要根据系统所在业务场景去估算,推断出来一个系统运行模型,评估 JVM 性能和 GC 频率等等指标。
MickyInvQ
2023/03/23
7530
新系统上线如何规划机器容量
一个多月的努力,FGC发生频率优化了400倍
公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。
java进阶架构师
2021/07/08
7400
一个多月的努力,FGC发生频率优化了400倍
.NET周报【10月第3期 2022-10-25】
https://www.cnblogs.com/huangxincheng/p/16799234.html
InCerry
2022/11/14
3.6K0
内网渗透-导出HASH的多种方式
在内网渗透中当我们得到一台高权限用户的身份时,就可以抓取到当前机器上的各类密码。虽然任务要求是导出域hash的方式,但在内网渗透中,获取当前机器的hash也有可能获取到域用户的hash,因此这里也分析一下如何获取当前机器的明文密码。
亿人安全
2024/08/13
5820
内网渗透-导出HASH的多种方式
每天100w次登陆请求, 8G 内存该如何设置JVM参数?
上周知识星球的同学在阿里云技术面终面的时候被问到这么一个问题:假设一个每天100w次登陆请求的平台,一个服务节点 8G 内存,该如何设置JVM参数? 觉得回答的不太理想,过来找我复盘。
码猿技术专栏
2024/01/01
7510
每天100w次登陆请求, 8G 内存该如何设置JVM参数?
Windbg分析高内存占用问题
最近产品发布大版本补丁更新,一商超客户升级后,反馈系统经常奔溃,导致超市的收银系统无法正常收银,现场排队付款的顾客更是抱怨声声。为了缓解现场的情况, 客户都是手动回收IIS应用程序池才能解决。
圣杰
2018/09/20
4.4K0
Windbg分析高内存占用问题
dotnet-trace 性能分析实用工具
若要安装最新版 dotnet-trace NuGet 包,请使用 dotnet tool install 命令:
呆呆
2022/01/09
1.2K0
Android最佳性能实践(二)——分析内存的使用情况
用户1158055
2018/01/05
1.7K0
Android最佳性能实践(二)——分析内存的使用情况
JVM调优
JVM调优是作为每一位Java程序员必备的技能。我们平时打代码一般很少接触到,只有真正部署过线上项目,并且遇到相应的非代码逻辑导致的问题时。为了更好地使用计算机的资源,我们有必要学习一下JVM调优。
用户3467126
2019/09/17
1.6K0
JVM调优
JVM内存分析排查工具
Java开发人员肯定都知道JDK的bin目录中有java.exe、javac.exe这两个命令行工具,但并非所有程序员都了解过JDK的bin目录下其他各种小工具的作用。随着JDK版本的更迭,这些小工具的数量和功能也在不知不觉地增加与增强。除了编译和运行Java程序外,打包、部署、签名、调试、监控、运维等各种场景都可能会用到它们。
燃192
2023/09/18
1.8K0
JVM内存分析排查工具
Java 进程占用内存过多,幕后元凶原来是线程太多
我们当前这个系统和很多的第三方系统做了集成,出问题的就是其中一个三方系统。其实很简单,他们的系统会产生一些个人待办任务,然后待办任务的个数需要推送到我们的 APP 上,作为图标的角标显示。
古时的风筝
2020/02/12
5.7K1
JVM 调优一个月,性能提升了 400 倍!
通过这一个多月的努力,将FullGC从40次/天优化到近10天才触发一次,而且YoungGC的时间也减少了一半以上,这么大的优化,有必要记录一下中间的调优过程。
公众号 IT老哥
2021/09/16
5700
JVM 调优一个月,性能提升了 400 倍!
相关推荐
调试 .NET Core 中的内存泄漏
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验