• 云智慧透视宝.NET代码性能监控实现原理


    一、. NET平台及现状

    1、.NET

    .NET框架是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境,多语言包括:C#、VB、C++(CLI)、J#等。

    .NET为创建HTML页面提供了一种编程模型,称为ASP.NET,在ASP.NET的编程模型里也有多种编程模型:如MVC、WebAPI、WebForm等。

    .Net架构模型图

    这张图基本描述了.NET的平台架构。

    2、平台及开源(不得不说的痛)

    基于.NET 2015之前版本编写的应用程序只能运行在Windows 平台上,如果想移值到Linux上则只能依赖开源框架(Mono)且需要重新编译。

    而按照微软在2015年Build大会上发布的.NET开发路线图,在5.0 及之后版本基于.NET Core 编写的应用程序将可以直接实现跨平台部署和运行,不再需要重新编译。

    5.0的正式版本会在2016春季正式发布,目前已经发布到Beta 7(2015年9月2日发布),这个版本的重要意义在于它第一次实现了.NET程序不依赖于Mono即可在Mac和Linux上运行。

    微软已将.NET平台下除Form之外的Core开源(在JAVA开源8年后,微软终于迈出了艰难的一步,但要走的路还很长)

    上图是微软对.NET平台的全新构建。

    3、基本概念

    CLR(Common Language Runtime,通用语言运行时)

    和Java虚拟机一样它是.NET应用程序的运行时环境,它负责程序的资源管理(内存分配和垃圾收集等等),并保证应用和底层操作系统之间必要的分离。

    MSIL(Microsoft Intermediate Language,微软中间语言)

    IL是微软.NET平台上衍生出来的一门中间语言,.NET平台上各种高级语言(如C#,VB,F#)的编译器会将各自的文字表述方式转化为IL。各种不同的文字形式最终被统一到了IL的表述方式,包含了.NET平台上的各种元素,如“范型”,“类”、、“接口”、“模块”、“属性”等等。

    JIT(Just In Time,即时编译)

    使用高级语言编写的应用被编译为IL后,JIT编译器会将IL编译为本地指令并执行,从而最大限度的实现了平台无关性。

    .NET平台框架具备天然的跨平台优势,但微软却把它打造成了windows平台独享的版本,还好的是他现在迈出了开源和跨平台的第一步。

    二、透视宝之.NET应用性能监控实现及原理

    1、基本原理

    .NET 应用程序编译后会被编译为IL,它们通常会被打包为后缀名为“.dll”的文件,即动态链接库,这些文件里包含了应用程序元数据、IL及程序链接信息等,JIT负责编译这些DLL中的IL语言,将它们转换成机器可执行的机器码。

    在JIT第一次编译IL之前,我们的 .NET Agent 会拦截并改写这些IL并注入探针,拦截方法执行,抓去程序运行堆栈,收集应用程序上下文数据(包括SQL等任何想要的数据)。

    2、.NET Profiling Agent 的实现

    透视宝 .NET Agent 由两部分组成:

    (1)、探针注入核心组件

    它是一个使用 C++ 语言编写的组件。理论上可以附加到任何想要拦截的.NET应用运行时环境里(包括ASP.NET、.NET桌面应用程序及Service、甚至 Windows Phone 的移动应用里),它负责IL改写且只会在任何方法被JIT前执行一次,一旦执行完成,将不会再执行。

    探针注入核心组件要求高效、稳定、安全,因为任何对IL的改写出错和操作失误,都会导致整个应用程序崩溃

    (2)、探针

    探针是一组方法,主要完成上下文数据收集,包括堆栈、SQL、API等透视宝关注的数据。

    这是.NET Profiling Agent 实现的原理图,图中绿色的部分即为.NET Profiling Agent存在的两个层面。

    (3)、举例(我们依然从不变的Hello world! 程序开始)

    源程序:

    编译后:

    Instrumented IL:

    三、安装及部署

    透视宝.NET Profiling Agent 遵循Smart Agent组件的标准开发规范,配置和安装也非常简单,只需要执行一个.bat文件即可,且不受应用及机器重启的影响,只要安装后它便会一直存在。

    这是.NET Agent的安装生命周期流程图,图中深蓝色的部分是需要手动干预的部分,其它都自动完成。

    以上是云智慧透视宝.NET代码监控的实现原理和部署方法,除此之外透视宝还支持PHP、Java、Python等主流Web语言的监控,在单次请求追踪中提供针对代码执行情况的详细追踪,包括:查看执行最慢的10个元素,包括元素执行次数、持续时长和占用时长百分比;查看HTTP请求参数,包括请求的响应状态、链接页面、具体的请求参数及返回结果;查看代码执行堆栈的详细树状信息,包括每个方法的计算时间、总耗时和被调用的次数,您能直接看到特殊标识的最慢方法;查看涉及SQL语句的总耗时排序,包括SQL执行总耗时、执行次数和具体的查询语句等。

    目前透视宝APM的标准版功能永久免费,企业版提供30天免费试用,有需要的开发者和运维同学可以访问透视宝官网:http://toushibao.com/,申请注册。

  • 相关阅读:
    在ensp上配置Trunk接口
    在ensp上VLAN基础配置以及Access接口
    在ensp上的ARP及Proxy ARP
    在ensp上简单的配置交换机
    1000000 / 60S 的 RocketMQ 不停机,扩容,平滑升级!
    DE1-SOC 只要加载驱动VNC就断开(DE1-SOC 只要加载驱动串口就卡住)
    通过U盘拷贝文件到DE1-SOC 的 Linux系统
    Linux 系统响应来自 FPGA 端的中断的中断号到底怎么对应?(GIC控制器)
    HPS 访问 FPGA 方法之五—— 通过FPGA 中断访问
    HPS 访问 FPGA 方法之四—— 编写 Linux 字符设备驱动
  • 原文地址:https://www.cnblogs.com/amy26/p/4876985.html
Copyright © 2020-2023  润新知