.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/ ,申請注冊。