一般咱们能够依靠ApplicationInsights(如下简称ai)来收集好比请求(request),依赖项(dependencies),异常(exception)等信息,可是没法收集到好比一个方法(方法内部好比没有依赖项调用)的信息。linux
不少时候若是一个方法很慢,咱们只能根据ai分析首先是否是依赖项慢致使,若是不是,就以依赖项为节点,看这个依赖项是前面慢仍是后面慢,而后在进行下一步分析。git
而后又回到了性能优化全靠猜的地步。github
ai能不能也有相似一些高阶的分析工具所具备的分析代码某路径耗时的功能呢?答案是确定的。web
ai有一个功能称之为探查器,就是专门用于诊断这种代码级性能的,其中早期的只能在azure上才能使用(不管你是web app部署仍是vm部署均可以可是必需要是在azure上的)windows
这个其实限制了其使用范围,由于我司并无使用azure web app来承载站点而是跑在本身机房上(只能干瞪眼流口水)性能优化
如今他有一个面向core的能够本身安装的版本app
具体地址 https://github.com/microsoft/ApplicationInsights-Profiler-AspNetCore asp.net
目前这个项目还处于beta阶段,能够运行在windows和linux下工具
使用也很简单,首先项目确定要是用了ai的,并且要是2.1以上的asp.net core项目,而后在使用ai的基础上安装对应的包,而后添加一行代码便可性能
须要安装一个新的ai的profiler的nuget包,注意目前该包只有pre-release版本,若是搜索不到注意下是否勾选了show pre-release package
添加使用Profiler的代码
装好以后,站点直接启动运行便可
此时站点除了常规的ai监控外,额外得到了profiler的能力,他会偶尔的汇报几个profiler的包,汇报的策略目前我我的还不清楚不过能够肯定这个汇报的包确定很少
我手头一个一天5万多访问量(2台机器)的站点1天下来也就4个profiler
众所周知的是ai是基于数据量收费的,若是过多的包这个荷包子是个问题,我这边目前也是一个项目先扔上去看下会致使多少费用增加,目前看起来还好。
先看看profiler的效果,若是收集到了profiler的话,会在性能面板里显示出来,嗯。我这里只有4个
点进去能够看到ai所收集到的profiler的详细信息
这里能够看到我整个流程的一个耗时(当前选中的这个)是300多ms,而后这里能够细化到每一个方法的耗时是多少,我就随便找一个分支不断点下去
从上图咱们能够看到我这每一个操做流程中的耗时,具体能够参考官方文档 https://docs.microsoft.com/zh-cn/azure/azure-monitor/app/profiler-overview 如何从中分析出你的代码