一、本次學(xué)習(xí)重點內(nèi)容:
本堂課的知識要點有哪些?
1、性能發(fā)現(xiàn)工具pprof
2、性能調(diào)優(yōu)案例
二、詳細知識點介紹:
1、性能調(diào)優(yōu)簡介
性能調(diào)優(yōu)原則:
要依靠數(shù)據(jù)不是猜測
要定位最大瓶頸而不是細枝末節(jié)
不要過早優(yōu)化
不要過度優(yōu)化
2、性能發(fā)現(xiàn)工具pprof
說明:
1、希望知道應(yīng)用在什么地方耗費了多少CPU、Memory
2、pprof是用于可視化和分析性能分析數(shù)據(jù)的工具
pprof 功能簡介
3、pprof 排查實戰(zhàn)
下載示例項目,GitHub地址:https://github.com/wolfogre/go-pprof-practice
項目提前埋入了許多炸彈代碼,會產(chǎn)生許多可觀測性能問題。
運行項目,瀏覽器輸入網(wǎng)址:http://localhost:6060/debug/pprof/
看到界面到:
CPU:
使用任務(wù)管理器:
使用pprof工具:
**進入pprof:**go tool pprof “http://localhost:6060/debug/pprof/profile?seconds=10”
使用top命令查看CPU狀態(tài):
相關(guān)含義:
可以清晰看到是那個函數(shù)消耗大量資源。
根據(jù)指定的正則表達式查找代碼行:
命令:list
調(diào)用關(guān)系可視化:命令:web
這里輸出圖片相關(guān)格式需要先安裝graphviz,graphviz安裝地址如下
https://graphviz.org/download/
安裝后檢查環(huán)境變量:
dot -version
記住,安裝時勾選創(chuàng)建環(huán)境變量,安裝完成后重啟Goland才能讀取到最新的環(huán)境變量。
一定要重啟Goland?。。。?!
刪除問題代碼再次運行:
Heap堆內(nèi)存:
進入可視化pprof:
命令:
go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/heap”
瀏覽器輸入:
localhost:8082
top視圖:
source視圖:
注釋問題代碼后:
可以看到內(nèi)存占用由85%降到68%
goroutine——協(xié)程
查看協(xié)程數(shù):
進入可視化pprof:
命令:
go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/goroutine”
瀏覽器輸入:
localhost:8082
火焰圖查看
注:
由上到下表示調(diào)用順序
每一塊代表一個函數(shù),越長代表占用CPU 的時間更長
火焰圖是動態(tài)的,支持點擊塊進行分析
source視圖:
注釋問題代碼后:
mutex——鎖
查看鎖數(shù):
進入可視化pprof:
命令:
go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/mutex”
瀏覽器輸入:
localhost:8082
source視圖:
注釋問題代碼后:
block——阻塞
查看阻塞數(shù):
進入可視化pprof:
命令:
go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/block”
瀏覽器輸入:
localhost:8082
source視圖:
注釋問題代碼后:
小結(jié):
4、性能調(diào)優(yōu)案例
介紹實際業(yè)務(wù)服務(wù)性能優(yōu)化的案例,對邏輯相對復(fù)雜的程序如何進行性能調(diào)優(yōu)
分類:
業(yè)務(wù)服務(wù)優(yōu)化
基礎(chǔ)庫優(yōu)化
Go語言優(yōu)化。
業(yè)務(wù)服務(wù)調(diào)優(yōu):
基本概念:
服務(wù):能單獨部署,承載一定功能的程序
依賴:Service A 的功能實現(xiàn)依賴Service B的響應(yīng)結(jié)果,稱為 Service A依賴 Service B
調(diào)用鏈路:能支持一個接口請求的相關(guān)服務(wù)集合及其相互之間的依賴關(guān)系
基礎(chǔ)庫:公共的工具包、中間件
流程
1、建立服務(wù)性能評估手段
2、分析性能數(shù)據(jù),定位性能瓶頸
3、重點優(yōu)化項改造
4、優(yōu)化效果驗證
建立服務(wù)性能評估手段
服務(wù)性能評估方式:
1、單獨benchmark無法滿足復(fù)雜邏輯分析
2、不同負載情況下性能表現(xiàn)差異
請求流量構(gòu)造:
1、不同請求參數(shù)覆蓋邏輯不同
2、線上真實流量情況
壓測范圍:
單機器壓測、集群壓測
性能數(shù)據(jù)采集:
單機性能數(shù)據(jù)、集群性能數(shù)據(jù)
基礎(chǔ)庫優(yōu)化:
AB實驗SDK的優(yōu)化:
1、分析基礎(chǔ)庫核心邏輯和性能瓶頸
設(shè)計完善改造方案
數(shù)據(jù)按需獲取
數(shù)據(jù)序列化協(xié)議優(yōu)化
2、內(nèi)部壓測驗證
3、推廣業(yè)務(wù)服務(wù)落地驗證
Go語言優(yōu)化:
編譯器&運行時優(yōu)化:
1、優(yōu)化內(nèi)存分配策略
2、優(yōu)化代碼編譯流程,生成更高效的程序
3、內(nèi)部壓測驗證
4、推廣業(yè)務(wù)服務(wù)落地驗證
優(yōu)點:
接入簡單,只需要調(diào)整編譯配置
通用性強
總結(jié):
性能調(diào)優(yōu)原則:
1、要依靠數(shù)據(jù)不是猜測性能分析工具 pprof
2、熟練使用pprof工具排查性能問題并了解其基本原理性能調(diào)優(yōu)
3、保證正確性·定位主要瓶頸文章來源:http://www.zghlxwxcb.cn/news/detail-475993.html
三、個人總結(jié):
? 本次學(xué)習(xí)算是比較深入的了解了性能優(yōu)化的相關(guān)知識。特別是見識到了pprof工具的強大,可以精準地定位問題代碼,可視化地展示程序運行中CPU、內(nèi)存、協(xié)程的資源的分配使用。后續(xù)的性能調(diào)優(yōu)專業(yè)知識也講的通俗易懂。文章來源地址http://www.zghlxwxcb.cn/news/detail-475993.html
到了這里,關(guān)于Go性能調(diào)優(yōu)及相關(guān)工具使用(四)——性能調(diào)優(yōu)工具pprof的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!