通常我们可以依靠 ApplicationInsights(以下简称 ai)来收集比如请求 (request), 依赖项(dependencies), 异常(exception) 等信息, 但是无法收集到比如一个方法 (方法内部比如没有依赖项调用) 的信息.
很多时候如果一个方法很慢, 我们只能根据 ai 分析首先是不是依赖项慢导致, 如果不是, 就以依赖项为节点, 看这个依赖项是前面慢还是后面慢, 然后在进行下一步分析.
然后又回到了性能优化全靠猜的地步.
ai 能不能也有类似一些高阶的分析工具所具有的分析代码某路径耗时的功能呢? 答案是肯定的.
ai 有一个功能称之为探查器, 就是专门用于诊断这种代码级性能的, 其中早期的只能在 azure 上才能使用(无论你是 web App 部署还是 vm 部署都可以但是必须要是在 azure 上的)
这个其实限制了其使用范围, 因为我司并没有使用 azure Web App 来承载站点而是跑在自己机房上(只能干瞪眼流口水)
现在他有一个面向 core 的可以自己安装的版本
具体地址
目前这个项目还处于 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://www.cnblogs.com/leolaw/p/10960853.html