dotnet诊断工具记录

CPU爆高(cpu陡增,比如正常运行一般是x%的cpu,突然到了20% 30%甚至更高)

调试高 CPU 使用率

dotnet tool install --global dotnet-counters
和dotnet-trace配合使用收集dotnet程序信息,参见https://docs.microsoft.com/zh-cn/dotnet/core/diagnostics/debug-highcpu?tabs=windows
dotnet-trace ps # 获取pid
dotnet-counters monitor --refresh-interval 1 -p 22884 # 监视CPU使用率
dotnet-trace collect -p 22884 --providers Microsoft-DotNETCore-SampleProfiler  # --providers 是指定了所需的提供程序,是微软提供的应用程序,也可以不写
上一步收集,将收集.nettrace文件,可以使用vs 2022直接打开或者PerfView打开(推荐vs 2022)
打开后将会展示出CPU占比,自己忽略掉system等系统路径,查看到自己的代码路径,然后定位具体方法

内存泄漏(内存飙高或者出现oom)

调试内存泄露

dotnet tool install --global dotnet-dump # dotnet-counters 和 dotnet-dump 结合使用,也可以不进行监视,直接收集转储文件
dotnet-counters monitor --refresh-interval 1 -p 4807 # 查看GC Heap Size (MB) 这一行 ,可以忽略
dotnet-dump collect -p 4807 # 收集转储文件
dotnet-dump analyze core_20190430_185145 # 加载转储的文件
dumpheap -stat # 查看托管堆的整体状态,找到最后几行,给出的结果会按照从小到大排序,所以不用再往上面翻了
结果有四列 MT、Count、TotalSize、Class Name,查看TotalSize和Count最大的几个,然后用MT来做下一步
dumpheap -mt 00007faddaa50f90 # 查看当前MT对应的Class Name列表
输出结果Address、MT、Size ,然后用Address来做下一步
对Class Name实例使用 gcroot 命令,以查看对象的根方式和原因
gcroot -all 00007f6ad09421f8 # 可以将上一步的Address多查看几个,特别是size不同的,以免漏掉一些内存泄漏的地方
查看最后输出的HandleTable内容,一般就是自己所要查看内存泄漏的堆栈信息

死锁(无响应或线程累积问题)

调试 .NET Core 中的死锁

dotnet-dump collect -p 4807
dotnet-dump analyze  ~/.dotnet/tools/core_20190513_143916
threads # 如果确定已经线程飙高了,这句话可以不执行
clrstack -all # 如果确定已经线程飙高了,这句话可以不执行
syncblk # 找出实际持有监视器锁定的线程

将会出现类似于下面这种的输出,其中查看Thread这一列,对齐可以有问题,自己要看好Thread指的是死锁所在的线程ID

`
Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner
43 00000246E51268B8 603 1 0000024B713F4E30 5634 28 00000249654b14c0 System.Object
44 00000246E5126908 3 1 0000024B713F47E0 51d4 29 00000249654b14d8 System.Object

Original: https://www.cnblogs.com/spatxos/p/16664334.html
Author: spatxos
Title: dotnet诊断工具记录

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582898/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python爬虫_入门

    本来觉得没什么可写的,因为网上这玩意一搜一大把,不过爬虫毕竟是python的一个大亮点,不说说感觉对不起这玩意基础点来说,python2写爬虫重点需要两个模块,urllib和url…

    Linux 2023年6月6日
    091
  • c++ 跨平台线程同步对象那些事儿——基于 ace

    前言 ACE (Adaptive Communication Environment) 是早年间很火的一个 c++ 开源通讯框架,当时 c++ 的库比较少,以至于谈 c++ 网络通…

    Linux 2023年6月6日
    0110
  • Flink 集群搭建,Standalone,集群部署,HA高可用部署

    基础环境 准备3台虚拟机 配置无密码登录 配置方法:https://ipooli.com/2020/04/linux_host/ 并且做好主机映射。 https://www.apa…

    Linux 2023年6月7日
    0125
  • 国产银河麒麟Kylin V10操作系统-如何将应用程序固定到任务栏方便启动

    大家都知道,在windows 7以上的版本操作系统上,如果想将应用程序固定到任务栏有两种方法: 一种是在开始菜单中找到该应用程序,右键-“锁定到任务栏”; …

    Linux 2023年6月14日
    0142
  • 【MQTT】在Linux下sqlite3的使用

    安装sqlite3 #下载 wget https: #解压 tar -xzvf sqlite-autoconf-3310100.tar.gz sqlite3库函数 1. 打开/创建…

    Linux 2023年6月13日
    083
  • 假如,程序员面试的时候说真话

    做程序员这么长时间了,经常能够听到一句话:面试造火箭,入职拧螺丝。而且,随着就业环境越来越卷,现在只会造火箭恐怕都不行了,得能造个空间站才行。 回想自己刚毕业那会儿,哪有什么八股文…

    Linux 2023年6月7日
    082
  • 良许跌宕起伏的2021年

    大家好,我是良许,前码农,现创业者。 时间飞逝,转眼就2021年年尾了,向各位「股东」们汇报一下良许的 2021 年。 公众号运营至今,每年我都会写年终总结,前三次总结给大家放在下…

    Linux 2023年6月14日
    0119
  • docker网络管理

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

    Linux 2023年6月7日
    091
  • ajax跨域问题

    public class CrosFilter implements Filter { @Override public void destroy() { // TODO Auto…

    Linux 2023年6月7日
    0107
  • 演示webuploader和cropperjs图片裁剪上传

    最近有个项目要在浏览器端裁剪并上传图片。由于缺乏人力,只能我上阵杀敌。通过参考各种文章,最后决定用cropperjs进行图片裁剪,用webuploader上传文件。本文涉及到的知识…

    Linux 2023年6月6日
    0109
  • K8S-kubeadm安装

    K8S-kubeadmin快速安装K8S集群 1.IP规划 节点 IP 组件 MASTER01(4C/6G,cpu核心数大于2) 192.168.80.20 docker、kube…

    Linux 2023年6月13日
    0107
  • powershell 编写的tui界面脚本《电壳别名宝》

    中文名: 《电壳别名宝》 English name: 《Power Alias》 powershell 编写的tui界面脚本。 用途:保存容易记住的别名(支持中文),保存linux…

    Linux 2023年6月14日
    0100
  • 如何配置静态路由

    1.主机A想要和主机B 进行通讯,首先会发送一个ARP的广播。 2.第一次封装包含:源IP(192.168.1.2)目的IP(192.168.2.2);源Mac(11-11)目的M…

    Linux 2023年6月6日
    0116
  • 模型层

    准备阶段 django自带的sqlite3数据库,功能很少,并且针对日期类型不精确 准备步骤 数据库正向迁移命令(将类操作映射到表中) python3 manage.py make…

    Linux 2023年6月7日
    097
  • SQL错题集

    查找最晚入职员工的所有信息 查找入职员工时间排名倒数第三的员工所有信息 获取所有部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary 从ti…

    Linux 2023年6月14日
    099
  • Bitmap在Redis中的应用(转)

    原文:https://cloud.tencent.com/developer/news/387248 作者:一叶而不知秋 作为铺垫,我们先来介绍一些Bitmap的相关内容: 位图主…

    Linux 2023年5月28日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球