您现在的位置: 天极网 > IT新闻 > 业内快讯

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

Yesky天极新闻 2015-09-29 15:48 我要吐槽

  一、.NET平台及现状

  1、.NET

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

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

  .Net架构模型图

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

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

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

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

  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之前,我们的 .NETAgent 会拦截并改写这些IL并注入探针,拦截方法执行,抓去程序运行堆栈,收集应用程序上下文数据(包括SQL等任何想要的数据)。

  2、.NET ProfilingAgent 的实现

  透视宝 .NETAgent 由两部分组成:

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

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

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

  (2)、探针

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

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

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

  源程序:

  编译后:

  Instrumented IL:

  三、安装及部署

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

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

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

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

评论
* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!
焦点热词