天天看點

高性能-性能評估及工具

帶着問題去思考!大家好

性能問題是架構前想的還是之後想的?評估什麼?

  在設計階段時,你需要了解整體架構和限制條件,不然你就回遺漏一些關鍵點,這将嚴重制約程式的運作,設計階段就把性能目标預先考慮進去。當然安全問題也是一樣的。一旦項目進入測試,部署和維護階段,就得把更多的經理投入到微觀優化,具體代碼方式的分析,減少記憶體占用等工作。

  我們評估什麼呢?評估的東西太多,就拿記憶體來說,顯然需要評估記憶體占用情況,以便減少記憶體小号,檢視那些類記憶體呢?專用工作集記憶體,送出大小,頁面緩存池,峰值工作機,.NET堆記憶體大小,還是大對象堆記憶體。

平局值還是百分位值

用什麼統計值才合适》多數人會優先選用平均值,但是應該考慮一下百分位值。如果對程式的可用性有要求,肯定會用到百分比形式的性能名額。例如:資料庫請求的平均延遲必須少于10ms。95%以上的資料庫請求延遲必須少于100ms。

(P/100)xN,P為百分位值,N為資料個數。

假定測試由0代垃圾回收導緻的暫停服務時間

1,2,2,4,5,5,8,10,10,11,11,11,15,23,24,25,50,87;

18個樣本資料。平均值為17ms,95%百分位值遠大于50ms。如果隻看平均值,你也許不會發現垃圾回收引起的延時問題。你還會發現,中間值(50%百分位值)與平均值的差距相當大,那些占比高的數值,對平均值的影響往往比較大。這樣不具備統計學意義,也許隻是偶然,可以用一條經驗法則來确認所需的樣本數,0-99%需要100個,99.9%需要1000個,以此類推,可以從數學角度了解到底需要多少樣本數才夠用。

評估工具

  “性能螢幕”,所屬Category和名稱,Processor Time計數器屬于Process類,它的多個執行個體分别對應了目前存在的各個處理器。有些性能計數器還帶有“元執行個體”,

  我們先熟悉一下基本的作業系統術語

  •   實體記憶體---安裝在計算機中的實體晶片記憶體,隻有作業系統才能直接管理實體記憶體。
  •   虛拟記憶體---屬于程序的邏輯記憶體塊。虛拟記憶體可以大于實體記憶體。虛拟記憶體中連續的記憶體塊,在實體記憶體中不一定是連續的,程序中的所有記憶體位址都是指虛拟記憶體。
  •   保留記憶體---在虛拟記憶體位址空間中為程序預留的位址段,且永遠不會被配置設定。保留記憶體無法用于記憶體配置設定,因為它根本不存在。隻是一段記憶體位址
  •   已送出記憶體---實體存在的一段記憶體,可能位于RAM中,也可能在磁盤上,
  •   記憶體頁---記憶體機關,每頁包含了多個已配置設定的記憶體塊,機關通常KB
  •   頁面交換----在多個虛拟記憶體區域之間交換記憶體頁的過程,記憶體頁即可能與其他進行交換(軟交換),也可能與硬碟交換(硬交換)。軟交換的速度可以非常快,隻要把記憶體映射到目前程序的虛拟位址空間即可,硬交換則涉及到速度較慢的硬碟資料交換。你的程式盡量避免觸發硬交換。
  •   調入記憶體頁--把記憶體頁從其他地方送入目前程序,
  •   調出記憶體頁--把記憶體頁從目前程序送出至其他地方。比如磁盤
  •   上下文切換---儲存和恢複線程或程序狀态的過程,因為線程數目通常總是多餘可用處理器數,是以往往每秒會發生多次上下文交換
  •   核心模式--該模式下允許作業系統修改底層硬體參數,
  •   使用者模式--用于執行普通指令的非特權模式,

Process類計數器可以提供很多重要資訊。大家不妨試一試;

PerfView

他是由微軟的.NET性能架構師Vance Morrison編寫的。

當然還有很多工具,。CLR Profiler,Windbg.MeasureIt。這裡不在贅述,大家可以通過其他途徑擷取了解。這些隻不過是一些可視化程式。更重要的是評估,評估在評估

上一篇: .NET基礎2
下一篇: EF Core-2