使用CoreProfiler/NanoProfiler实现跨平台&应用的整合性能调试

摘要

NanoProfiler是一个开源.NET性能调试类库,CoreProfiler是其.NET Core版本的实现。在之前的一些文章中,我曾介绍过NanoProfiler的主要使用方式,以及如何为生产环境,基于ELK对应用性能进行调试和监控。不过,对于一般的用户来说,尤其是本机开发和小团队开发,搭建ELK,维护这套这套支持系统的稳定运行,学习曲线还是有点高。而如果只是单个app孤立的使用NanoProfiler,则大大浪费了其原本能发挥的跨应用性能调试监控的能力。

本文演示了3个不同平台的后端应用使用CoreProfiler/NanoProfiler实现跨应用的性能调试和监控。这三个应用包括.Net Core和传统的.NET 4.5 Web项目,演示的技术包括:

  • 如何在.NET Core程序中使用CoreProfiler进行Wcf服务、Http REST服务和EntityFramework数据库调用的性能监控;
  • 如何在传统.NET 4.5 Web项目中使用NanoProfiler进行Wcf服务和Http REST服务调用的性能监控;
  • 如何配置CoreProfiler/NanoProfiler实现自动的跨平台&应用的整合性能调试和监控;

完整的示例源码,可以从下面的地址下载:
https://github.com/teddymacn/cross-app-profiling-demo

示例代码目录结构

  • Core.UI - .Net Core Mvc 应用,用于UI呈现,调用外部Wcf服务和Http REST服务
  • Core.Api - .Net Core WebApi 应用,提供Http REST服务,使用EntityFramework进行数据访问
  • Net45.Api - 传统.Net 4.5 WebApi 应用,提供Wcf服务和Http REST服务,调用自己提供的Wcf服务,调用外部.Net Core Api提供的Http REST服务

示例代码运行步骤

  1. 开发环境要求:Windows 7+,IIS7+,VS2015 Update 3,.Net Core SDK VS Tool v1.0.0+;
  2. 从github上git clone上面的示例repo;
  3. 运行run_api.cmd启动Core.Api服务;
  4. 使用VS2015打开Net45.Api项目,按F5运行,确保页面打开显示正在运行;
  5. 运行run_ui.cmd启动Core.UI服务;
  6. 在任意浏览器中访问Core.UI的首页: http://127.0.0.1:3001;
  7. 点击打开页面上的链接,进一步点击链接,查看详细的性能调试的结果;
  8. 点击drill down/drill up链接,查看关联服务调用的性能调试结果;

图示

访问Core.UI首页:

查看Core.UI首页的性能调试结果:

注意上图中的drill down链接,点击这些链接,可以drill down到Core.UI对外发出的Wcf服务和REST服务调用的性能调试结果。比如,如果我们点击http://127.0.0.1/Net45Api/AsyncHandler.ashx旁边的drill down链接:

在进一步点击http://127.0.0.1:3002/?from-Net45Api旁边的drill down,我们可以看到从Net45.Api应用调用Core.Api的REST服务的性能调试结果:

代码解析

Core.UI

Core.UI的project.json中,我们可以看到对CoreProfiler和Wcf相关的nuget package的引用:

Core.UI的Startup中,我们可以看到,开启CoreProfiler性能调试,只需要添加这一行代码(这里的参数true表示开启跨应用drilldown功能):

Net45ApiServiceConfiguration.cs中为Wcf服务的client添加了开启CoreProfiler的Wcf调试的Behavior:

这个static partial方法,是.Net Core中,为由Wcf Connected Services生成的Wcf client代码进行额外配置的标准方式,这里不做详述。

在Core.UI/Controllers/HomeController.cs中,值得一提的是,对自定义REST请求,为使drilldown功能工作,需要添加一个header,使得两个请求的性能调试结果能够互相关联:

调用Wcf服务,无需特殊处理,因为前面添加的WCF Behavior已经自动添加对应的header:

Core.Api

Core.Api因为同样是.Net Core项目,总体配置方式和Core.UI类似,唯一额外的是,为EntityFramework,开启了的CoreProfiler的DB profiling支持:

Net45.Api

Net45.Api是一个传统.Net 4.5项目,在之前的NanoProfiler系列中,已经介绍过NanoProfiler在Web应用中的使用,这里不重复介绍了。这里唯一额外的是,开启了跨应用drilldown功能,和.NetCore项目略有不同,需要左两个步骤。

步骤1,在Web.config中添加NanoProfilerImportModule:

步骤2,在Global.asax.cs中,设置TryToImportDrillDownResult开关为true:

基本上就是这样了,Enjoy!

 
分类: NanoProfiler

CoreProfiler/NanoProfiler的更多相关文章

  1. 使用CoreProfiler/NanoProfiler实现跨平台&应用的整合性能调试

    摘要 NanoProfiler是一个开源.NET性能调试类库,CoreProfiler是其.NET Core版本的实现.在之前的一些文章中,我曾介绍过NanoProfiler的主要使用方式,以及如何为 ...

  2. CoreProfiler/NanoProfiler性能调试监控系列总目录

    NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇 NanoProfiler - 适合生产环境的性能监控类库 之 大数据篇 NanoProfiler - 适合生产环境的性能监控类 ...

  3. NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇

    背景 NanoProfiler是一个EF Learning Labs出品的免费性能监控类库(即将开源).它的思想和使用方式类似于MiniProfiler的.但是,设计理念有较大差异. MiniProf ...

  4. NanoProfiler - 适合生产环境的性能监控类库 之 大数据篇

    上期回顾 上一期:NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇 上次介绍了NanoProfiler的基本功能,提到,NanoProfiler实现了MiniProfiler欠 ...

  5. NanoProfiler - 适合生产环境的性能监控类库 之 实践ELK篇

    上期回顾 上一期:NanoProfiler - 适合生产环境的性能监控类库 之 大数据篇 上次介绍了NanoProfiler的大数据分析理念,一晃已经时隔一年多了,真是罪过! 有朋友问到何时开源的问题 ...

  6. CoreProfiler升级到.NetStandard 2.0

    致所有感兴趣的朋友: CoreProfiler和相应的Sample项目cross-app-profiling-demo都已经升级到.NetStandrard 2.0和.NetCore 2.0. 有任何 ...

  7. petapoco 使用 MiniProfiler Glimpse监控

    PetaPoco是一款适用于.Net(window) 和Mono( linux )的微小.快速.单文件的微型ORM. MVC MiniProfiler是Stack Overflow团队设计的一款对AS ...

  8. MiniProfiler工具介绍

    MiniProfiler是一款针对.NET, Ruby, Go and Node.js的性能分析的轻量级程序.可以对一个页面本身,及该页面通过直接引用.Ajax.Iframe形式访问的其它页面进行监控 ...

  9. MiniProfiler工具

    MiniProfiler工具介绍   MiniProfiler是一款针对.NET, Ruby, Go and Node.js的性能分析的轻量级程序.可以对一个页面本身,及该页面通过直接引用.Ajax. ...

随机推荐

  1. git与svn的区别-小结一下

    1)Git是分布式的,SVN不是: 这 是GIT和其它非分布式的版本控制系 统,例如SVN,CVS等,最核心的区别.好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后再提交.合并 ...

  2. 使用GridView自带分页的代码

    关于GridView分页页码的讨论 在GridView中实现分页的效果方法非常easy,仅仅须要在"GridView任务"对话框中进行设置就能够了.在"GridView任 ...

  3. leetcode__Convert Sorted List to Binary Search Tree

    Convert Sorted List to Binary Search Tree Total Accepted: 12283 Total Submissions: 45910My Submissio ...

  4. [TypeScript] Reflection and Decorator Metadata

    TypeScript allows you to emit decorator metadata which enables more powerful features through reflec ...

  5. hdu1864 最大报销额(01背包)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864 Problem ...

  6. GDB的non-stop模式

    线程调试必杀技 - GDB的non-stop模式   作者:破砂锅 开源的GDB被广泛使用在Linux.OSX.Unix和各种嵌入式系统(例如手机),这次它又带给我们一个惊喜. 多线程调试之痛 调试器 ...

  7. LabVIEW系列——自定义错误

    1.自定义错误代码文本文件在labview中三处:      a).E:\Program Files\National Instruments\LabVIEW 8.6\project\errors   ...

  8. MFC/VC++ 响应回车键的实现

    在VC++中,要实现对回车键的响应实现,一般通过截获消息来响应,即通过处理BOOL PreTranslateMessage(MSG* pMsg)这个函数来处理 实现如下: BOOL PreTransl ...

  9. Android UI 开发

    今天主要学习了Android UI开发的几个知识 6大布局 样式和主题→自定义样式.主题 JUnit单元测试 Toast弹窗功能简介 6大布局 RelativeLayout LinearLayout ...

  10. ssh 无密码登录远程服务器

    在讲下文之前,我都默许大家都已经生成了自己的ssh公钥和密钥,在自己的~/.ssh 目录下面,如果没有,请使用 ssh-keygen -t rsa -C "你的邮箱" 命令生成 1 ...