zoukankan      html  css  js  c++  java
  • 使用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首页

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

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

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

    Core.UI对外发出的Wcf服务和REST服务调用的性能调试结果

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

    从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!

  • 相关阅读:
    根据列的值改变DataGridView行的颜色
    在WebForm上进行拖拽
    使用jQuery, CSS, JSON 和ASP.NET打造一个新闻轮换控件
    C#语法中的select
    C#事件(event)解析
    一步一步教你打造一个Numeric TextBox控件
    2010创造奇迹的一年
    超级简单:在一个TextArea中如何限制行数和字符数
    如何成为人尽皆知的C#开发人员
    一个"简单"的ASP.NET的服务器控件
  • 原文地址:https://www.cnblogs.com/teddyma/p/coreprofiler_cross_app_profiling_demo.html
Copyright © 2011-2022 走看看