go效能調優之火焰圖
瞭解到go中有pprof包來做程式碼的效能監控,可以檢視堆疊、cpu資訊等。在兩個地方有包:
net/http/pprof
runtime/pprof
但是使用起來並不是特別好用(不是特別直觀)。之前在接觸systemtap的時候,瞭解到火焰圖這個東西。後來瞭解到uber開源了一個生成火焰圖的工具——go-torch。
下面整理下,之前使用分析的一個過程。
1 新增pprof程式碼
首先我們要在例項的main函式中新增pprof的相關的程式碼:
package main
import (
...
_"net/http/pprof"
"github.com/astaxie/beego"
"os/exec"
"net/http"
)
func main() {
go func(){
http.ListenAndServe(":6789", nil)
}()
這樣我們可以通過訪問URL:http://<ip>:6789/debug/pprof/得到堆疊資訊
通過訪問URl:http://<ip>:6789/debug/pprof/profile獲得函式呼叫CPU消耗的情況(不是特別直觀,一堆文字)
2 生成火焰圖工具安裝
需要安裝兩個工具:FlameGraph指令碼和go-torch
git clone https://github.com/brendangregg/FlameGraph.git
cp flamegraph.pl /usr/local/bin
或
export FlameGraph所在的path
go get -v github.com/uber/go-torch
3 測試
完成安裝之後,執行測試程式和測試工具:
go-torch -u http://<ip>:6789 -t60 -p > profile-local.svg
表示採集60s的資料(預設30s),完了後會在當前目錄生成一張火焰圖,可以用瀏覽器開啟:
4 如何看圖
參考:https://blog.csdn.net/wwwasw/article/details/52137630
每個框代表一個棧裡的一個函式 Y軸代表棧深度(棧楨數)。最頂端的框顯示正在執行的函式,這之下的框都是呼叫者。在下面的函式是上面函式的父函式 X軸代表取樣總量。從左到右並不代表時間變化,從左到右也不具備順序性 框的寬度代表佔用CPU總時間。寬的框代表的函式可能比窄的執行慢,或者被呼叫了更多次數。框的顏色深淺也沒有任何意義 如果是多執行緒同時取樣,取樣總數會超過總時間
相關文章
- linux 效能調優工具perf + 火焰圖 常用命令Linux
- 程式設計師精進之路:效能調優利器--火焰圖程式設計師
- Linux之效能調優Linux
- 效能調優學習之硬體調優
- solr研磨之效能調優Solr
- 效能調優命令之jstackJS
- 如何讀懂火焰圖?+ 例項講解程式效能優化優化
- Linux程式效能分析和火焰圖Linux
- Flame Graph 火焰圖分析 Java 效能Java
- Linux效能調優命令之freeLinux
- perf及火焰圖的使用,效能分析
- 效能工具perf的用法以及如何繪製效能火焰圖
- Rust效能分析之測試及火焰圖,附(lru,lfu,arc)測試Rust
- (1)Linux效能調優之Linux程式管理Linux
- MySQL調優效能監控之show profileMySql
- MySQL調優效能監控之performance schemaMySqlORM
- Spark 效能調優--資源調優Spark
- Linux火焰圖效能分析文章及視訊演示Linux
- 又一款效能監控利器——火焰圖
- 【效能調優】效能測試、分析與調優基礎
- ElasticSearch效能調優Elasticsearch
- adnroid效能調優
- Spark(十三) Spark效能調優之RDD持久化Spark持久化
- 效能測試之測試分析與調優
- 使用火焰圖進行Java應用效能分析Java
- Chrome 火焰圖Chrome
- Golang火焰圖Golang
- (3)Linux效能調優之Linux檔案系統Linux
- 效能調優實戰
- 效能監控調優
- linux調優效能命令Linux
- .Net效能調優-ArrayPool
- .Net效能調優-MemoryPool
- 容器化 RDS:藉助火焰圖定位Kubernetes效能問題
- TiDB 效能分析&效能調優&優化實踐大全TiDB優化
- Nginx安全優化與效能調優Nginx優化
- (2)Linux效能調優之Linux記憶體體系Linux記憶體
- HDFS 07 - HDFS 效能調優之 合併小檔案