net应用程序中发生了未经处理的异常怎么办_介绍一些在.NET Core 3.0中引入的诊断改进工具...

编者按:即使.NET Core3.1.5已经发布,在进行.NET Core的性能诊断时,我们有时依然不知该从何处下手,那这篇介绍.NET Core3.0中引入的诊断工具,或许能为我们提供参考。

在.NET Core 3.0中,我们引入了一套工具,这些工具利用了.NET运行时中的新功能,使诊断和解决性能问题变得更加容易。

这些运行时功能可帮助您回答一些常见的诊断问题:

  1. 我的应用程序健康吗?

  2. 为什么我的应用程序有异常行为?

  3. 为什么我的应用程序崩溃了?

我的应用程序健康吗?

通常,应用程序可能会慢慢开始泄漏内存,并最终导致内存不足异常。在其他时候,某些有问题的代码路径可能会导致CPU使用率激增。这些只是您可以通过指标主动识别的一些问题类别。

指标

指标表示一段时间内的数据量度。指标(或时间序列)数据使您可以从高层次观察系统状态。与Windows上的.NET Framework不同,.NET Core不会发出性能计数器。相反,我们引入了一种通过EventCounter API 在.NET Core中发出指标的新方法。

EventCounters提供了Windows性能计数器的改进,因为这些计数器现在可在支持.NET Core的所有操作系统上使用。此外,与perf计数器不同,它们还可以在低特权环境(例如xcopy部署)中使用。不幸的是,由于缺少诸如性能监视器(perfmon)之类的工具,因此很难实时使用这些指标。

dotnet-counters

在3.0-preview5中,我们引入了一个新的命令行工具,用于实时观察.NET Core应用程序发出的指标。

您可以通过运行以下命令来安装此.NET全局工具

dotnet tool install --global dotnet-counters --version 1.0.3-preview5.19251.2

在下面的示例中,当我们将负载生成器指向Web应用程序时,我们看到应用程序的CPU利用率和工作集内存急剧上升。

有关如何使用此工具的详细说明,请参阅dotnet-counters自述文件。对于已知的限制,请查看GitHub上的未解决问题。

dotnet-counters

为什么我的应用程序有异常行为?

虽然指标可以帮助识别异常行为的发生,但它们几乎无法提供问题的可见性。要回答为什么您的应用程序具有异常行为的问题,您需要通过跟踪收集其他信息。例如,通过跟踪收集的CPU配置文件可以帮助您识别代码中的热路径。

追踪

跟踪是离散事件的不加时间戳的记录。跟踪包含本地上下文,可让您更好地推断系统的命运。传统上,.NET Framework(以及ASP.NET等框架)通过Windows事件跟踪(ETW)发出有关其内部的诊断跟踪。在.NET Core中,这些跟踪被写入Windows上的ETW和Linux上的LTTng。

dotnet-trace

在3.0-preview5中,每个.NET Core应用程序都会打开一个双工管道EventPipe(该管道可以在其上发出事件)(在* nix上是Unix域套接字/在Windows上是一个命名管道)。当我们仍在研究控制器协议时,请实现此协议的预览版。dotnet-trace

您可以通过运行以下命令来安装此.NET全局工具

dotnet tool install --global dotnet-trace--version 1.0.3-preview5.19251.2

在上面的示例中,我dotnet trace使用默认配置文件运行,该配置文件启用了CPU事件探查器事件和.NET运行时事件。

除了默认事件之外,您还可以根据要尝试执行的调查来启用其他提供程序。

运行后dotnet trace,将显示一个.netperf文件。该文件包含运行时事件和可以在perfview中显示的示例 CPU堆栈。Visual Studio的下一个更新(16.1)也将添加对可视化这些跟踪的支持。

2840d982486e7d3b11cc8cd41cd0a2be.png

如果捕获跟踪时在OS X或Linux上运行,则可以选择将这些.netperf文件转换为可以使用Speedscope.app可视化的.speedscope.json文件。

您可以通过运行以下命令来转换现有跟踪

dotnet trace convert <input-netperf-file>

下图显示了冰柱图,可视化了我们刚刚在Speedscope中捕获的轨迹。

2e99eabf4e101ec5e51f61764c4b39a8.png

有关如何使用此工具的详细说明,请参阅dotnet-trace自述文件。对于已知的限制,请查看GitHub上的未解决问题。
dotnet-trace

为什么我的应用程序崩溃了?

在某些情况下,仅通过跟踪过程就不可能确定导致异常行为的原因。如果流程崩溃或我们可能需要更多信息(例如访问整个流程堆)的情况,则流程转储可能更适合分析。

转储分析

转储是通常在进程意外终止时捕获的进程的工作虚拟内存状态的记录。诊断核心转储通常用于确定应用程序崩溃或意外行为的原因。

传统上,您在应用程序崩溃时依靠操作系统来捕获转储(例如Windows错误报告),或者在满足某些触发条件时使用procdump之类的工具来捕获转储。

迄今为止,在Linux上使用.NET捕获转储的挑战是使用NET捕获转储,gcore否则调试器会导致极大的转储,因为现有工具不知道在.NET Core进程中要修剪哪些虚拟内存页。

此外,即使您已经收集了这些转储,也仍然需要分析调试器,因为它需要获取调试器并将其配置为加载sos(.NET的调试器扩展),这具有挑战性。

dotnet-dump

3.0.0-preview5,我们引入了一个新工具,使您可以捕获和分析Windows和Linux上的进程转储。

dotnet-dump 仍在积极开发中,下表显示了哪些操作系统当前支持哪些功能。

视窗OS X的Linux
收集

分析

您可以通过运行以下命令来安装此.NET全局工具

dotnet tool install --global dotnet-dump --version 1.0.3-preview5.19251.2

安装完成后,您可以通过运行以下命令来捕获进程转储dotnet dump

sudo $HOME/.dotnet/tools/dotnet-dump collect -p 

在Linux上,可以通过运行以下命令加载结果转储来分析结果转储

dotnet dump analyze <dump-name>

在下面的示例中,我尝试通过遍历堆来确定崩溃转储的ASP.NET Core宿主环境。

有关如何使用此工具的详细说明,请参阅dotnet-dump自述文件。对于已知的dotnet-dump限制,请查看GitHub上的未解决问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python pptp链接_pptp-client连接设置

一、安装软件包yum -y install pptpyum -y install pptp-setup二、使用pptpsetup命令直接拨号&#xff0c;可直接生成配置文件。pptpsetup --create NAME --server ADDRESS --username DOMAIN\\USER --password PWD --encrypt –start#--encrypt&#xff1a;支持加密&#xff0…

python选择框格式_PyQt组合框选择性文本格式

圣诞快乐伙计们&#xff01;在我不熟悉PyQt4编程&#xff0c;并且在大多数UI开发中使用Qt设计器。不过&#xff0c;我有一个特定的需求&#xff0c;需要通过Python代码填充QComboBox。另外&#xff0c;我想更改一些条目的文本格式(粗体&#xff0c;红色背景色)。在基本上&#…

python 整数输出 d f_pythn print格式化输出---------%s 和 % d 都是什么意思?

pythn print格式化输出。%r 用来做 debug 比较好&#xff0c;因为它会显示变量的原始数据(raw data)&#xff0c;而其它的符号则是用来向用户显示输出的。1. 打印字符串print ("His name is %s"%("Aviad"))效果&#xff1a;2.打印整数print ("He is %…

c语言memcopy_用C语言模拟实现memcpy函数,memmove函数和memset函数

模拟实现memcpy函数&#xff1a;函数原型&#xff1a;void *memcpy (void *p,void *m, size_t num);memcpy与strcpy相比&#xff0c;memcpy函数用来做内存拷贝&#xff0c;可以用它拷贝任何数据类型的对象&#xff0c;并且可以指定拷贝的数据长度。stycpy函数也是用来做内存拷贝…

python中oxf2是什么_0x02-StartingPoint-Oopsie

Help Desk经过第一篇文章&#xff0c;我思考了一下&#xff0c;已经存在太多的 walkthrough&#xff0c;不应该再去写一样的文章&#xff0c;而是应该着重写思路。接下来的文章&#xff0c;会着重写在什么情况下&#xff0c;应该做些什么&#xff0c;应该注意哪些信息&#xff…

java jlist checkbox_JCheckBox检查Java中的JList中的切换逻辑时遇到问题

如果我理解这个问题......import java.awt.*;import java.awt.event.*;import javax.swing.*;public class JListToggleLogicTest {private final ClearSelectionListener listener new ClearSelectionListener();public JComponent makeUI() {JList list new JList(makeMode…

java yaml dump方法_yamlyaml.load与yaml.dump方法

yaml.load与yaml.dump方法该模块提供了一些方法&#xff0c;不过常用的方法只有两个yaml.load和yaml.dump &#xff0c;以下是一个版本相关的yaml 格式文件[root361way yaml]# cat tree.yamltreeroot:branch1:name: Node 1branch1-1:name: Node 1-1branch2:name: Node 2branch2…

vba中有多线程吗_VBA会被Python代替吗?

先说答案&#xff1a;不会被替代这里引用轮子哥的话说&#xff1a;微软只会开发更多的增强型插件来慢慢淡化VBA&#xff0c;但是不会用其他语言取代VBA。早在17年底&#xff0c;就有风声说Python要取代VBA&#xff0c;成为Excel官方脚本语言。我认真翻看了下好多篇文章&#xf…

java 编码实现内存拷贝_java提高篇(六)-----使用序列化实现对象的拷贝

我们知道在Java中存在这个接口Cloneable&#xff0c;实现该接口的类都会具备被拷贝的能力&#xff0c;同时拷贝是在内存中进行&#xff0c;在性能方面比我们直接通过new生成对象来的快&#xff0c;特别是在大对象的生成上&#xff0c;使得性能的提升非常明显。然而我们知道拷贝…

统计一个整数的所有因子的个数_【题解循环嵌套】1095:数1的个数

1095&#xff1a;数1的个数时间限制: 1000 ms 内存限制: 65536 KB【题目描述】给定一个十进制正整数n(1≤n≤10000)&#xff0c;写下从1到n的所有整数&#xff0c;然后数一下其中出现的数字“1”的个数。例如当n2时&#xff0c;写下1,2。这样只出现了1个“1”&#xff1b;当…

运行java是提示 选择未包含 main 类型 如何解决_RuoYi 若依 代码生成器使用教程...

你好&#xff01; 若是你想学习如何使用RuoYi 若依 代码生成器, 能够仔细阅读这篇文章&#xff0c;了解一下RuoYi 若依 代码生成器的基本知识。java新建数据表(注意字段必定要写注释)USE ry;web/*Table structure for table sys_zyq */sqlDROP TABLE IF EXISTS sys_zyq;数据库C…

vb.net 功能f8键事件_憋了三年,史上最全的 F1~F12 键用法整理出来了!

F1~F12 键在Excel表格中的用法&#xff0c;小编很早就想写篇教程整理一下。可三年过去了还没整理出来&#xff0c;原因有很多&#xff0c;总结成一个字&#xff1a;懒&#xff01;这么&#xff0c;终于整理出来了&#xff01;提示&#xff1a;有的电脑启用了FN键&#xff0c;如…

java递归分苹果_递归较难题——分苹果问题

第四届程序设计大赛 苹果Time Limit:1000MS Memory Limit:65536KTotal Submit:90 Accepted:48Description把M个同样的苹果放在N个同样的盘子里&#xff0c;允许有的盘子空着不放&#xff0c;问共有多少种不同的分法&#xff1f;(用K表示)5&#xff0c;1&#xff0c;1和1&#…

usb hid 调试软件_开源USB免驱固件升级软件分享

跳兔科技开源软件分享&#xff0c;免驱的USB固件升级软件&#xff0c;给您的产品提供无限的活力。加快产品上市速度。相信做MCU开发的人都免不了要做boot升级功能&#xff0c;产品投入使用中&#xff0c;如果再使用link进行固件更新的话就比较麻烦&#xff0c;那么拥有一个优秀…

java地址自动拆分_java – Hibernate:每个月自动拆分表

我正在研究一个带有Postgresql和Hibernate的Spring-MVC应用程序,其中我有几个表,行数超过10万(10万).这些表,我95&#xff05;的时间只访问最新的数据,并筛选所有这些行是耗时的.很多时候查询规划器甚至没有使用索引(原因我不知道).然后我想到每周拆分数据库表,所以我们可以先访…

yolo算法_不到2MB,超轻YOLO算法!准确率接近YOLOv3,速度快上45%

点击上方↑↑↑“OpenCV学堂”关注我来源&#xff1a;公众号 量子位 授权最轻的YOLO算法出来了&#xff01;这是个模型非常小、号称目前最快的YOLO算法——大小只有1.3MB&#xff0c;单核每秒148帧&#xff0c;移动设备上也能轻易部署。而且&#xff0c;这个YOLO-Fastest算法满…

mysql报错last packet_mysql The last packet successfully received

mysql服务器最近老是报错&#xff0c;内容如下&#xff1a;The last packet successfully received from the server was 65,502,275 milliseconds ago. The last packet sent successfully to the server was 65,502,276 milliseconds ago. is longer than the server configu…

http请求丢部分数据_温故知新,HTTP/2

去年年底&#xff0c;据国际互联网工程任务组( IETF )消息&#xff0c;HTTP-over-QUIC 实验性协议将被重命名为 HTTP/3&#xff0c;即有望成为 HTTP 协议的第三个正式版本&#xff0c;也就是说HTTP/3可能要来了。 该消息是如此的惹人注目&#xff0c;是因为HTTP是我们身边的协议…

poi java 其他_让POI架起Java与Office之间的桥梁一

本文将阐述如何用POI来读取/写入完整的Excel文件。作者&#xff1a;中国IT实验室 来源&#xff1a;中国IT实验室 2007年8月31日本文将阐述如何用POI来读取/写入完整的Excel文件。约定&#xff1a;POI项目2.0版现在已经接近正式发行阶段&#xff0c;开发进度迅速&#xff0c;不断…

vue ui框架_「webAPP」记录几款比较好用的vue 移动端的ui框架

有时在做项目时&#xff0c;不同场景的项目既要有网站&#xff0c;又要有手机端&#xff0c;为了快速开发&#xff0c;如果功能简单&#xff0c;要求不高的话&#xff0c;我们一般会用H5进行移动端的适配。如果采用纯html进行书写手机端的样式&#xff0c;往往UI的体验感非常差…