性能分析十八招,你用哪一招?
來源:程序員人生 發布時間:2014-09-29 08:00:01 閱讀次數:3207次
對系統或程序進行相關性能分析,有助于分析研究運行時出現的問題或查找出問題根源。而沒有方法論指導的分析,如盲頭蒼蠅,費時費力。為確保軟件滿足或超過設計的期望值,有必要分析應用程序的性能以發現潛在的問題。性能分析一個必不可少的環節是使應用程序的組件可見。當能夠了解組件是如何交互時,就可以診斷潛在的性能問題。
主要采用的方法論,包括:USE 方法:找出資源瓶頸;TSA 方法:分析程序用時;Off-CPU分析:分析任何類型的線程延時;http://www.brendangregg.com/activebenchmarking.htmlActive Benchmarking(動態基準)分析,進行精確有效的基準分析。
以下將列舉出一個綜覽清單,開始部分包含一些個人不建議的反對的做法,不妨作為一個反面教材來參考。
1. 推諉他人(反對的)
- 嘗試找出一個系統或環境的組件,但是該組件與你無關。
- 假設問題出在該組件上。
- 把問題推至與該組件真正相關的團隊。
- 當發現其實也與該團隊無關時,重做第一步,繼續找別人的茬。
2. 指路明燈(反對的)- 采用以下任一方法來選擇簡便工具:自己熟悉的;在Internet找來的;隨機找來的。
- 運行工具。
- 找出顯眼的問題。
3. 酒徒做法(錯誤做法)
隨機變更事物直到問題離去。
4. 隨機變更(錯誤做法)
- 測量一個性能基線。
- 隨機找出并變更一個屬性。
- 沿著某一個方向進行變更操作。
- 測量系統性能。
- 換個方向繼續執行變更。
- 測量系統性能。
- 步驟4或6的結果好于基線嗎?如果是,繼續執行;否則,執行回退。
- 回到步驟1。
5. 被動的基準(錯誤做法)
- 選擇一個基準工具。
- 采用不同的選項組合運行工具。
- 根據結果做一個幻燈片。
- 按著幻燈片來進行管理。
6. 臨時的檢查清單法
運行 A,如果出現 B,執行 C。
7. 問題陳述法
- 什么讓你覺得出現了性能問題?
- 系統之前運作良好嗎?
- 最近執行了什么變更(例如:軟件,硬件,負載)?
- 是潛伏期或運行時間方面的性能減退問題嗎?
- 該問題會影響其他人或程序嗎(還是僅僅是自己)?
- 運行環境是怎么樣的?用了什么軟件或硬件?版本?配置?
8. 系統法9. 工作負荷特征描述法
- 誰正在引起工作負荷?PID,UID,IP地址等。
- 為什么會產生工作負荷?代碼路徑
- 工作負荷是什么?IOPS,tput命令,類型
- 這些負荷隨著時間是怎樣變化的?
10.自上而下分析法
- 從最高級開始
- 檢查下一級別的細節
- 找出最關注部分進行分解
- 如果問題得不到解決,重做第2步
11.逐層分析法
從以下方面進行造成延遲的測量:
- 多語言
- 執行文件
- 運行庫
- 系統調用
- 核心:文件系統,網絡
- 設備驅動
12.延遲分析法
- 測量運行時間(延遲)
- 劃分成同步的邏輯部件
- 繼續進行劃分直到找出延遲的根源
- 量化:估算系統恢復后帶來的速度提升
13.工具法
- 列出可用的性能分析工具
- 針對每個工具各自特點列出有用的指標
- 針對每項指標,作出相關解釋
- 運行挑選后的工具,針對選出的指標進行分析
14.USE方法
對于每項資源,作出如下檢查:
- 利用率(Utilization)
- 飽和度(Saturation)
- 錯誤(Errors)
15. 棧配置法
- 跟蹤線程堆棧信息,針對on-CPU和off-CPU進行分析
- 聯合分析
- 把堆棧倒置進行分析
16.off-CPU分析法
- 針對堆棧中每一計劃調度線程進行off-CPU時間分析
- 對類同的堆棧進行聯合分析
- 對于最長和最短用時進行分析
17.TSA方法
1. 針對每一引起重視的線程,測量操作系統線程狀態的時間。例如:
2. 使用合適的工具對最高和最低發生頻率事件進行分析。
18.動態基準法
- 以一個足夠長的周期來運行測量基準。
- 運行的時候,使用其他工具進行性能分析,查找出限制因素。
英文出自:brendangregg
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈