怎麼圖解效能優化?

yixian.zou發表於2017-11-10

因為工作的原因,對效能優化,程式調優比較關注,但是效能分析溼一個大課題。本書從應用,作業系統至網路逐步分析如何進行調優。

## Let‘s Go!

第一章

  • 什麼是演算法,具體例子
  • 鎖的效能,機制

在並行情況下保證資料一致性的必要機制,鎖的實現:

  • golang:mutex
  • java:synchronized,讀寫鎖,除了這兩種常規的鎖方式,還提供無鎖的操作類,最具代表性的就是使用CAS的ConcurrentHashMap

可能導致的問題:死鎖

在兩個物件互相爭用對方已佔用的資源而產生,解決方案?百度一下嘛兄弟。

如何提高效能

我認為是無法提高鎖的效能,應該處理的是以下兩個方面

  • 提高的應該是被鎖區域(下稱:臨界區)的處理速度,讓下一個操作儘快進入。
  • 降低臨界區的粒度,控制其複雜度,只需要將保持原子性的程式碼放入臨界區,不過還是推薦多寫可重入的程式碼。

第二章

  • 效能分析的基礎:從資料開始(原話:從測量開始)
  • 收集必要資訊
  • 效能分析工具

如何測量

這個是大部分初學者,剛接觸效能分析的朋友比較頭疼的問題,在此我推薦比較實用的工具

資料庫級

  • Mysql:如果線上允許可以使用Druid的監控

快取級

  • Redis:CacheCloud

語言級

  • java:jmap,jhat,jstack,jvisualvm,MAT,jprofile,好了到這裡都是大家知道的工具。另外:還有Netflix公司提供的FlameGraph火焰圖
  • golang:pprof

作業系統級

  • 系統監控:zabbix,grafana
  • 系統鏈路跟蹤:CAT,pinpong

第三章

  • 效能分析思路
  • 如何調查原因

效能分析思路

應先熟悉整個鏈路,再從前端到資料庫伺服器排查整個鏈路出現效能問題的點,再去評估修復方案,最後就是用前面提到的一些工具幫助修復。

如何調查原因

建議看一下書中這一節中“初學者容易掉入的陷阱”中介紹的案例,例如:關注受害者,千萬不要只關注受害者,要不永遠不知道真正效能問題發生的原因。

第四章

  • 掌握現場調優的準則
  • 調優的技巧

現場調優的準則

  • 時刻保持大局觀。
  • 要有前瞻性的眼光,但是調優需要適合目前的業務情況,不能過度優化。
  • 多看資料,以資料為基準

調優的技巧

  • 限流
  • 訪問頻率高的資料,總在使用者的附近
  • 同步->非同步
  • 多工處理
  • LB
  • Cache
  • 讀寫分離 不再一一列舉

第五章 效能測試

  • 效能測試種類
  • 有針對性的效能測試
  • 效能測試的預估

為什麼是由針對的效能測試?

不是每一個功能的需要進行效能測試,只需要測試真實有效能要求的功能才是有意義,例如:壓測只有一個管理員使用的後臺管理使用者功能,這樣做是無意義的。

為什麼需要對效能測試進行預估?

對效能測試提供資料預估,是為效能測試的目標提供準則,為線上驗證提供依據。 怎樣進行效能預估?首先需要該功能的DAU,從DAU推算出平均QPS,使用現有資料的高峰期與平均QPS的比值,推算出該功能的高峰期QPS並用於效能測試。如果找不到DAU怎麼辦?找產品啊!還能咋辦?產品沒有咋辦?自求多福,兄弟。

第六章

  • 什麼是虛擬化
  • 主要虛擬化技術
  • 虛擬化效能分析方案

CPU及記憶體虛擬化技術

主要是超執行緒,CPU與記憶體過載使用的時候,宿主機如何去快速切換/排程CPU與記憶體的技術。

第七章

  • 雲端計算與IDC架構的區別
  • 雲端計算內部結構與最佳架構
  • 雲端計算中的效能問題分析

差異?

就是上了雲之後,可以再也不需要太操心硬體的問題,都有專人幫你解決,可以讓開發人員更加專注於業務。

效能問題分析?

也是各種傳統工具,其中兩種就是AB與Jmeter。

最後

再次推薦該書,不僅對解決問題的思維有積極影響,對工作及生活都有另外一番思考。

祝各位讀者閱讀愉快!

相關文章