首页 > 其他分享 >重新整理 .net core 实践篇 ———— dotnet-dump [外篇]

重新整理 .net core 实践篇 ———— dotnet-dump [外篇]

时间:2022-11-08 12:23:56浏览次数:64  
标签:core procdump 查看 dump 抓取 重新整理 内存 dotnet

前言

本文的上一篇为: https://www.cnblogs.com/aoximin/p/16861797.html

该文为dotnet-dump 和 procdump 的实战介绍一下。

正文

现在很多情况下去抓取dotnet 运行的信息一般都是适用 procdump 或者 直接使用dotnet-dump

这个procdump 有什么用呢?

根据 ProcDump 帮助,下面是必须使用的开关:

-M:当内存提交超过或等于指定值时触发核心转储文件生成 (MB)
-n:退出前要写入的核心转储文件数 (默认值为 1)
-s:连续几秒钟写入转储文件 (默认值为 10)
-d:将诊断日志写入 Syslog
-p:进程的 PID

这个的好处就是有时候突然间内存升高,其实就是多了一个监控的作用。

我记得以前每次用dotnet-dump的时候,我让运维写了一个脚本,当内存到达多少或者cpu到达多少的时候执行一些dotnet-dump 这个命令。

我们知道一般抓取需要连续抓取,那么我们用上一篇的例子抓一下。

procdump  -pgid 108232 -n 2 -c 50 -s 3

上面就是说cpu到达50%并持续时间3秒,那么就执行抓取操作,一共抓取两次,相隔10秒。

这个procdump 抓取的内容在workdirection下面,也就是自己的工作目录下面。

那么抓取一次。

运行的时候一直在monitor,看到了吧。

然后执行慢查询:

这样就ok了。

然后用dotnet-dump 去解析就好了。

如果使用dotnet-dump 的话:

这个是安装:

dotnet tool install -g dotnet-dump

然后你也可以这么收集:

查看正在运行的dotnet core:

dotnet-dump ps

然后:

dotnet-dump collect -p xxx

根据进程号收集就好了。 但是这样只能手动,procdump 可以做到监听。

如果是偶发性的用procdump 比较好,比如不是,那么用dotnet-dump就好了。

然后dotnet-dump 分析的话,举个例子:

dotnet-dump analyze /tmp/coredump.manual.1.108232

然后其实和lldb 没有什么区别,其实lldb 更为强大而已,带调试功能和查看非托管的功能,而dotnet-dump 查看托管问题。

可以看到命令差不多。

把上篇文章的上半段内存问题给演示下:

dumpheap -stat

统计一下:

这个 string 很大,然后查看大对象:

dumpheap -stat -min 85000

大于8.5m string 有 365个。

查看一下对象堆,并且活跃的,可以理解为没有被GC标记的吧:

dumpheap -mt 00007f4908c80f90 -min 85000 -live

这里就有4个了。

那么查看其中一个就好。

95m差不吧。

然后看下其位置:gcroot -all 00007f48b6458178

这样就找到了代码的位置。

该系列逐步补充,补的是一些排查技巧和一些原理,为什么这样抓取,为什么能抓到之类的,怎么排查更快之流。

持续更新。。。。。。。

标签:core,procdump,查看,dump,抓取,重新整理,内存,dotnet
From: https://www.cnblogs.com/aoximin/p/16868010.html

相关文章

  • 交叉编译脚本-tcpdump
    说明编译tcpdump的脚本。参考​​tcpdump的移植和使用方法​​编译脚本run_tcpdump.sh#!/bin/bashset-ePATH_INSTALL=/opt/tcpdumpif[-f"Makefile"];thenmakedis......
  • 解决 net core 3.x 跨域问题
    跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。以下几种情况是造成跨域的原因:域名相同,端口不......
  • 关于ASP.NET Core WebSocket实现集群的思考
    前言    提到WebSocket相信大家都听说过,它的初衷是为了解决客户端浏览器与服务端进行双向通信,是在单个TCP连接上进行全双工通讯的协议。在没有WebSocket之前只能通过......
  • ASP.NET Core教程-Configuration(配置)-Swagger
    更新记录转载请注明出处:2022年11月8日发布。2022年11月5日从笔记迁移到博客。注册服务在服务容器中注册服务,使用AddSwaggerGen()方法。builder.Services.AddSw......
  • 【EF Core 】实体跟踪与非跟踪查询 AsNoTracking()
    微软官方文档链接跟踪行为决定了EntityFrameworkCore是否将有关实体实例的信息保留在其更改跟踪器中。如果已跟踪某个实体,则该实体中检测到的任何更改都会在SaveCha......
  • ASP .NET Core 使用 Serilog记录日志并输出至ElasticSearch
    Serilog添加ES配置服务端Elasticsearch+Kibana的部署参考这篇博客,版本都是当前最新版本8.5.0Serilog相关文档参考这篇博客新建一个ASP.NETCoreWeb项目,添加以下Neget......
  • ASP .NET Core 访问共享文件夹
    ASP.NETCore访问Windows共享目录安装Neget包Install-PackageSharpCifs.StdCodeSampleusingSharpCifs.Smb;usingSystem.IO;usingSystem.Linq;namespace......
  • vs如何分析dump文件
    首先保证Dump文件和dll文件在同一路径下1、用Vs打开dump文件,做出如下配置A、设置符号路径2、打开文件资源管理器的属性进行设置......
  • .netcore log schema and serilog-asp.netcore schema
    1.  asp.netcore 的Ilogger起源这里:services.TryAdd(ServiceDescriptor.Singleton<ILoggerFactory,LoggerFactory>());services.TryAd......
  • ASP.NET Core 集成 Skywalking 实现链路追踪
    Skywalking部署Skywalking简单介绍Skywalking是一个应用性能管理(APM)系统,具有服务器性能监测,应用程序间调用关系及性能监测等功能,Skywalking分为服务端、管理界面、以及......