關於乙個profiler工具的設計

2021-08-22 09:28:48 字數 1176 閱讀 7236

我目前想對之前寫的乙個profiler工具進行重構,和大家**一下我設想的一些思路。

首先,在設計中包含乙個重要的概念-----軌跡。

1)軌跡的定義

在系統中,任何程式的執行都有可能留下軌跡(資料庫的呼叫會留下sql軌跡,事務的軌跡,http請求會留下訪問的軌跡,程式的方法執行也可以留下軌跡)。

2)軌跡的管理

軌跡是錯綜複雜的,零碎地,關係模糊的,所以要真正有助於效能分析,還需要相應的支援。所以,軌跡又需要生命週期管理,和統計管理。

軌跡的生命週期管理:軌跡建立----到銷毀的各個狀態,有些時候,對於有問題的軌跡(比如執行時間過長),我們不希望銷毀軌跡,我們把這部分軌跡保留下來供效能分析。

軌跡的統計:不同關注點的軌跡,存在不同的統計邏輯,通過統計,展現給效能分析者,統計的邏輯可能很多樣,元件必須保持這方面的擴充套件。

3)軌跡的注入

軌跡不會自己產生,我們也不可能修改系統的**。而我又不想像其他的一些分析工具一樣,通過本地介面獲取jvm的狀態從而進行統計(那樣就得依賴jvm,依賴os)。現在我唯一能想到的辦法,是採用classworking。目前,我已經實現了乙個classenhancer,它能夠對指定的類在現有classloader模型採用父子委託模型的情況下很好的對類進行inject(如果不是這種模型,有可能在某些很特殊的部署方式下inject失敗)。

1)構件模型

元件的內部構件包括:

核心構件:包含軌跡,軌跡的生命週期,軌跡的統計

bytecode構件:可以對類進行inject,採用最通用的**模式invokehandle模式。

各種監控的構件:依賴於核心構件(有可能也依賴於bytecode構件)構造各種監控構件,比如資料庫監控構件,類方法監

控構件等等,構件可能擴充套件統計邏輯,現在對於這種構件還沒有想好怎麼樣定義他們的統一行為,我希望以後可以再此基礎上由第三方擴充套件新的監控構件。

配置構件:沒什麼好說的。。。

問題,我希望元件適用於生產環境,而不只是監控監控測試環境,那樣分析不出什麼,但是servlet做出來的介面效果。。。

2)部署

我希望部署越簡單越好,現在我能夠做到的配置,需要配置各種統計策略資料,但是資料庫監控的資料配置比較繁瑣,主要是由於,之前資料庫監控構件不是基於classworking實現 ,而是採用**連線池實現。不過現在可以通過classworking在資料庫驅動這層進行注入。

推薦乙個blog和乙個工具

最近較為系統的看了乙個 dflying chen老師的blogs中關於asp.net ajax的文章。寫的很好,從中學到了很多東西。所以特地在自己的blog中推薦一下,各位朋友,如果有空的話,可以去dflying chen老師的blog看一下。應該會有所收穫。另外,dflying chen老師的一篇...

乙個關於 的謎題

乙個關於 的謎題 今天在看書過程中發現了乙個問題,還挺有意思的,分享給大家。下面兩個 python 表示式會產生什麼結果?t 1,2,3,4 t 2 5,6 給四個備選答案 t變成 1,2,3,4,5,6 因為 tuple 不支援對它的元素賦值,所以會丟擲typeerror異常。以上兩個都不是。以上...

關於乙個加法優化的乙個地方

include include include base.h int main int argc,char argv,char envp 下面是彙編 01291000 55 push ebp 01291001 8bec mov ebp,esp 01291003 56 push esi 0129100...