一、分析程序的運行時間
(1)time指令(linux系統下)
time go run a.go
real:從程序開始到結束,實際上度過的時間
user:程序在用戶態度過的時間
sys:程序在內核度過的時間
一般情況下,real>=user+sys
(2) /usr/bin/time 指令(linux系統下)
/usr/bin/time -v go run a.go
該指令下 可以看到 cpu占用率、 內存使用情況、 進程切換情況 、文件系統io、socket情況
二.golang下cpu性能分析
(1)在程序中引入 _ "net/http/pprof" ,並開啟pprof監聽
import _ "net/http/pprof"
程序開始
http.ListenAndServe("0.0.0.0:10000", nil)
程序結束
通過瀏覽器查看 CPU的信息和狀態
http://127.0.0.1:10000/debug/pprof
注意,等程序運⾏⼀定時間,再點擊profile⽂件⽣成(⾄少是30s)
(2)使用pprof
go tool pprof [binary] [profile] //binary二進制文件 profile 要分析的文件
top //查看當前profile文件的cpu使用率
flat 該函數⾃身代碼的執⾏時⻓
flat% 該函數⾃身代碼的執⾏時⻓占⽤CPU的耗時百分⽐
cum 代表的是該函數⾃身代碼+所有調⽤的函數的執⾏時⻓
cum% 代表的是該函數⾃身代碼+所有調⽤的函數的執⾏時⻓,占⽤CPU的總耗時百分⽐
sum% 每⼀⾏的flat%與上⾯所有⾏的flat%總和
(3)go tool pprof profile文件
啟動要調試的程序,在另一個終端執行 go tool pprof http://localhost:10000/debug/pprof/profile?seconds=60
(4)可視化結構圖
先在終端運行 go tool pprof [binary] [profile] ,然后輸入web,瀏覽器會彈出一個可視化的圖片。
注意事項:確保可重復、穩定的環境| 不要再共享硬件上做性能分析 | 注意省點模式和過熱保護 | 不要使⽤虛擬機和雲主機
建議:關閉電源、過熱管理| 不要升級,確保環境的⼀致性 | 建議購買專業的硬件環境來性能測試
