- Go語言精進之路:從新手到高手的編程思想、方法和技巧(2)
- 白明
- 782字
- 2022-01-04 17:42:28
第48條
使用expvar輸出度量數據,輔助定位性能瓶頸點
上一條提到,要想對Go應用存在的性能瓶頸進行剖析,首先就要對不同類型的性能數據進行收集和采樣。有兩種收集和采樣數據的方法。在微觀層面,采用通過運行性能基準測試收集和采樣數據的方法,這種方法適用于定位函數或方法實現中存在性能瓶頸點的情形;在宏觀層面,采用獨立程序收集和采樣數據的方法。但通過獨立程序進行性能數據采樣時,往往很難快速捕捉到真正的瓶頸點,尤其是對于那些內部結構復雜、業務邏輯過多、內部有較多并發的Go程序。我們在對這樣的程序進行性能采樣時,真正的瓶頸點很可能被其他數據遮蓋。
那么如何能更高效地捕捉到應用的性能瓶頸點呢?我們需要知道Go應用運行的狀態。應用運行狀態一般以度量數據的形式呈現。通過了解應用關鍵路徑上的度量數據,我們可以確定在某個度量點上應用的性能是符合預期性能指標還是較大偏離預期,這樣就可以最大限度地縮小性能瓶頸點的搜索范圍,從而快速定位應用中的瓶頸點并進行優化。
這些可以反映應用運行狀態的數據也被稱為應用的內省(introspection)數據。相比于通過查詢應用外部特征而獲取的探針類(probing)數據(比如查看應用某端口是否有響應并返回正確的數據或狀態碼),內省數據可以傳達更為豐富、更多的有關應用程序狀態的上下文信息。這些上下文信息可以是應用對各類資源的占用信息,比如應用運行占用了多少內存空間,也可以是自定義的性能指標信息,比如單位時間處理的外部請求數量、應答延遲、隊列積壓量等。
傳統編程語言(如C++、Java等)并沒有內置輸出應用狀態度量數據的設施(接口方式、指標定義方法、數據輸出格式等),需要開發者自己通過編碼實現或利用第三方庫實現。Go是“自帶電池”的編程語言,我們可以輕松地使用Go標準庫提供的expvar包按統一接口、統一數據格式、一致的指標定義方法輸出自定義的度量數據。在本條中,我們就一起來看看如何使用expvar輸出自定義的性能度量數據。
- Flutter開發實戰詳解
- Getting started with Google Guava
- DevOps for Networking
- Rust實戰
- Rake Task Management Essentials
- 區塊鏈架構與實現:Cosmos詳解
- C語言程序設計立體化案例教程
- Hands-On JavaScript High Performance
- C語言程序設計實踐教程
- SQL Server 2016數據庫應用與開發習題解答與上機指導
- Asynchronous Android Programming(Second Edition)
- 零基礎Java學習筆記
- Learning YARN
- 從Power BI到Analysis Services:企業級數據分析實戰
- Maven for Eclipse