天天看點

雲智慧透視寶.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天免費試用,有需要的開發者和運維同學可以通路透視寶官網,申請注冊。

繼續閱讀