前言

本文的上一篇为: 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

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

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

持续更新。。。。。。。

重新整理 .net core 实践篇 ———— dotnet-dump [外篇]的更多相关文章

  1. 重新整理 .net core 实践篇————配置应用[一]

    前言 本来想整理到<<重新整理.net core 计1400篇>>里面去,但是后来一想,整理 .net core 实践篇 是偏于实践,故而分开. 因为是重新整理,那么就从配置开 ...

  2. 重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]

    前言 简单整理一个linux 简单上线. 这个是该系列的外篇,该系列继续更新.献给刚学的人. 正文 安装实例 dotnet new webapp -n AspNetCoreDemo -o firstw ...

  3. 重新整理 .net core 实践篇————依赖注入应用[二]

    前言 这里介绍一下.net core的依赖注入框架,其中其代码原理在我的另一个整理<<重新整理 1400篇>>中已经写了,故而专门整理应用这一块. 以下只是个人整理,如有问题, ...

  4. 重新整理 .net core 实践篇 ———— linux上排查问题实用工具 [外篇]

    前言 介绍下面几个工具: Lldb createdump dotnet-dump dotnet-gcdump dotnet-symbol Procdump 该文的前置篇为: https://www.c ...

  5. 重新整理 .net core 实践篇 ———— linux上性能排查 [外篇]

    前言 该文的前置篇为: https://www.cnblogs.com/aoximin/p/16839830.html 本文介绍性能排查. 正文 上一节是出现错误了,如何去排查具体问题. 这一节介绍一 ...

  6. 重新整理 .net core 实践篇 ———— linux上排查问题 [外篇]

    前言 简单介绍一下在排查问题.献给初学者. 该文的前置篇: https://www.cnblogs.com/aoximin/p/16838657.html 正文 什么是linux系统 linux 是基 ...

  7. 重新整理 .net core 实践篇————依赖注入应用之援军[四]

    前言 介绍第三方依赖注入框架Autofac,看看为我们解决什么问题. 下面介绍4个点: 命名注册 属性注册 aop 注入 子容器命名 正文 为什么我们需要使用第三方框架?第三方框架为我们做了什么?第三 ...

  8. 重新整理 .net core 实践篇—————服务与配置之间[十一二]

    前言 前面基本介绍了,官方对于asp .net core 设计配置和设计服务的框架的一些思路.看下服务和配置之间是如何联系的吧. 正文 服务: public interface ISelfServic ...

  9. 重新整理 .net core 实践篇—————日志系统之作用域[十七]

    前言 前面介绍了服务与日志之间的配置,那么我们服务会遇到下面的场景会被遇到一些打log的问题. 前面我提及到我们的log,其实是在一个队列里面,而我们的请求是在并发的,多个用户同时发送请求这个时候我们 ...

随机推荐

  1. [RootersCTF2019]I_<3_Flask-1|SSTI注入

    1.打开之后很明显的提示flask框架,但是未提供参数,在源代码中发现了一个git地址,打开之后也是没有啥用,结果如下: 2.这里我们首先需要爆破出来参数进行信息的传递,就需要使用Arjun这一款工具 ...

  2. 被一位读者赶超,手摸手 Docker 部署 ELK Stack

    被一位读者赶超,容器化部署 ELK Stack 你好,我是悟空. 被奇幻"催更" 最近有个读者,他叫"老王",外号"茴香豆泡酒",找我崔更 ...

  3. 第八十七篇:Vue动态切换组件的展示和隐藏

    好家伙, 1.什么是动态组件? 动态组件指的是动态切换组件的限制与隐藏 2.如何实现动态组件渲染 vue提供了一个内置的<component>组件,专门用来实现动态组件的渲染. 可以将其看 ...

  4. KingbaseES 全局临时表

    Postgresql 支持会话级别的临时表,表的存续期只在创建临时表的会话存活期间,会话退出后,临时表自动删除,表结构及数据也无法跨会话共享.KingbaseES 除了支持PG原生的临时表机制外,还支 ...

  5. Python实践项目——LSB隐写术

    此为北京理工大学某专业某学期某课程的某次作业 一.项目背景 1.隐写术 隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容. 2.L ...

  6. Typora自动上传超级详细教程!!

    第一步检查环境变量 打开cmd 查看以下环境变量 需要软件: Typora PicGo gitee账号 配置node 配置git 第二步创建gitee仓库 设置仓库名直接创建,因为这里不能直接修改开源 ...

  7. DOS文档

  8. C语言的几个入门关于函数调用练习

    1.找素数(素数:除了1和本身之外不能被任何整数整除的的数)(被某数整除=除以某数是整数) 问题:输出2到200(包括2和200)的使有素数,从小到大排序. 思路:检查所有比i小的数,取余. 涉及的知 ...

  9. 类的常成员const

    成员数据 以Human为例: 类中: 传统的初始化方式:                                                                        ...

  10. Python数据科学手册-Numpy数组的计算:广播

    广播可以简单理解为用于不同大小数组的二元通用函数(加减乘等)的一组规则 二元运算符是对相应元素逐个计算 广播允许这些二元运算符可以用于不同大小的数组 更高维度的数组 更复杂的情况,对俩个数组的同时广播 ...