1. 程式人生 > >.NET效能優化

.NET效能優化

效能優化的指標和目標

效能目標,需求確定後,需要決定大體效能目標,在開發運營過程中調整目標。

舉例:

1.購物車併發使用者量不超過5000,需要300ms內處理完成“重要”類別下任意頁面請求。

2.應用程式單個空閒使用者會話的記憶體佔用不能超過4kb

3.在不超過10臺應用伺服器訪問的情況下,資料庫伺服器CPU和磁碟利用率不超過70%且能在75s內返回“常用”分類下的查詢請求。

效能指標關注點:在一定數量併發活躍請求和一定的線上使用者數下,單個請求處理時間,記憶體佔用,CPU使用,頁面失效次數

效能目標確定後,需進行效能測試,負載測試,以及後續優化。

總結:

對於客戶端應用:關注啟動時間,記憶體佔用,CPU佔用率

WEB應用:記憶體使用量,資料庫訪問,網路,磁碟操作,響應時間

系統演算法服務應用:關注CPU佔用率,快取失效,競爭,記憶體分配,垃圾回收

效能指標可以在不同粒度下測試,記憶體的分配和執行時間可以在系統級別,單程序級別,獨立方法,甚至程式碼行測量。

相對於整體CPU佔用率或程序級別的執行時間來說,特定方法的執行時間可能更易於操作效能指標。

不幸的是提高測量粒度會給效能本身帶來負擔。

效能指標列表:

CPU使用率 百分比

物理/虛擬記憶體佔用 位元組B 千位元組KB MB GB

快取失效 次/秒

頁面失效  次/秒

資料庫訪問次數及耗時 次/秒 ms

記憶體分配  位元組,物件數量 ,秒/次

執行時間 ms

網路操作 次/秒

磁碟操作 次/秒

響應時間 ms

垃圾回收 次/秒 耗時 ,佔總時間百分比

丟擲異常  次/秒

啟動時間 ms

競爭   次/秒

開發週期中的效能:

1.需求收集階段:開始思考設定怎樣的效能目標

2.架構階段:提煉各項總要指標,定義他們的具體效能目標

3.開發階段:對原型程式碼或區域性實現的功能進行比較頻繁的探索式效能測試,確保滿足系統的效能目標

4.測試階段:大量的負載測試和效能測試,檢測是否滿足系統的效能目標

5.維護:每個版本額外的負載和效能測試(每週每天),快速發現系統中效能的退化

如何開發一套自動負載測試和效能測試工具,搭建獨立的實驗環境,分析測試結果呢?