.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.維護:每個版本額外的負載和效能測試(每週每天),快速發現系統中效能的退化
如何開發一套自動負載測試和效能測試工具,搭建獨立的實驗環境,分析測試結果呢?