標籤:des style blog http color io os ar 使用
網頁伺服器
如果你的go程式是用http包啟動的web伺服器,你想查看自己的web伺服器的狀態。這個時候就可以選擇net/http/pprof。你只需要引入包_"net/http/pprof",然後就可以在瀏覽器中使用http://localhost:port/debug/pprof/直接看到當前web服務的狀態,包括CPU佔用情況和記憶體使用量情況等。具體使用方式你可以看godoc的說明。
代碼中加入
_ "net/http/pprof"
在瀏覽器中我就可以直接看prof資訊了
產生CPU狀態分析圖
下面我們想要產生CPU狀態分析圖,
調用go tool pprof http://localhost:3999/debug/pprof/profile
或者 go tool pprof http://localhost:3999/debug/pprof/profile --text
就會進入30秒的profile收集時間,在這段事件內猛重新整理點擊go-tour瀏覽器上的頁面,盡量讓cpu佔用效能產生資料。
(pprof) top
Total: 3 samples
1 33.3% 33.3% 1 33.3% MHeap_AllocLocked
1 33.3% 66.7% 1 33.3% os/exec.(*Cmd).closeDescriptors
1 33.3% 100.0% 1 33.3% runtime.sigprocmask
0 0.0% 100.0% 1 33.3% MCentral_Grow
0 0.0% 100.0% 2 66.7% main.Compile
0 0.0% 100.0% 2 66.7% main.compile
0 0.0% 100.0% 2 66.7% main.run
0 0.0% 100.0% 1 33.3% makeslice1
0 0.0% 100.0% 2 66.7% net/http.(*ServeMux).ServeHTTP
0 0.0% 100.0% 2 66.7% net/http.(*conn).serve
(pprof)web
服務進程
如果你的go程式不是web伺服器,而是一個服務進程,那麼你也可以選擇使用net/http/pprof包,同樣引入包net/http/pprof,然後在開啟另外一個goroutine來開啟連接埠監聽。
比如:
go func() { log.Println(http.ListenAndServe("localhost:8080", nil))
}()
應用程式
import "runtime/pprof"
func main() {
f, _ := os.Create("./profile.prof")
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
.......
}
#./geteandata 運行程式 收集資訊
#go tool pprof ./geteandata ./profile.prof 分析產生的檔案
進入到pprof中
top 可使用top 查看最耗時的function
web 會在/tmp下產生svg檔案,svg檔案是可以在瀏覽器下看的 註:如果報 sh: dot: command not found 則需要安裝 graphviz
#yum install graphviz
#dot -V 查看 graphviz是否安裝成功
各欄位的含義依次是:
1. 採樣點落在該函數中的次數
2. 採樣點落在該函數中的百分比
3. 上一項的累積百分比
4. 採樣點落在該函數,以及被它調用的函數中的總次數
5. 採樣點落在該函數,以及被它調用的函數中的總次數百分比
6. 函數名
註:本文部分資訊轉自 http://www.cnblogs.com/yjf512/archive/2012/12/27/2835331.html
Go的pprof使用