91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang中pprof的使用方法

發布時間:2020-06-24 11:48:25 來源:億速云 閱讀:541 作者:Leah 欄目:編程語言

這期內容當中的小編將會給大家帶來有關golang中pprof的使用方法,以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

go中有pprof包來做代碼的性能監控,在兩個地方有包:

net/http/pprof

runtime/pprof

其實net/http/pprof中只是使用runtime/pprof包來進行封裝了一下,并在http端口上暴露出來

pprof包

web 服務器

如果你的go程序是用http包啟動的web服務器,你想查看自己的web服務器的狀態。這個時候就可以選擇net/http/pprof。你只需要引入包_"net/http/pprof"。

然后就可以在瀏覽器中使用http://localhost:port/debug/pprof/直接看到當前web服務的狀態,包括CPU占用情況和內存使用情況等。具體使用情況你可以看godoc的說明。

服務進程

如果你的go程序不是web服務器,而是一個服務進程,那么你也可以選擇使用net/http/pprof包,同樣引入包net/http/pprof,然后在開啟另外一個goroutine來開啟端口監聽。

比如:

go func() {
        log.Println(http.ListenAndServe("localhost:6060", nil)) 
}()

應用程序

如果你的go程序只是一個應用程序,比如計算fabonacci數列,那么你就不能使用net/http/pprof包了,你就需要使用到runtime/pprof。具體做法就是用到pprof.StartCPUProfile和pprof.StopCPUProfile。比如下面的例子:

var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")

func main() {
    flag.Parse()
    if *cpuprofile != "" {
        f, err := os.Create(*cpuprofile)
        if err != nil {
            log.Fatal(err)
        }
        pprof.StartCPUProfile(f)
        defer pprof.StopCPUProfile()
    }
…

運行程序的時候加一個--cpuprofile參數,比如fabonacci --cpuprofile=fabonacci.prof

這樣程序運行的時候的cpu信息就會記錄到XXX.prof中了。

下一步就可以使用這個prof信息做出性能分析圖了(需要安裝graphviz)。

使用go tool pprof (應用程序) (應用程序的prof文件)

進入到pprof,使用web命令就會在/tmp下生成svg文件,svg文件是可以在瀏覽器下看的。像這個樣子:

golang中pprof的使用方法

如果你的程序非常簡單,比如只有println一個語句,你用pprof.StartCPUProfile是打印不出任何東西的。

舉例

下面拿go-tour舉個例子,這是個web程序,我在代碼中加入了

_ "net/http/pprof"

在瀏覽器中我就可以直接看prof信息了

golang中pprof的使用方法

生成CPU狀態分析圖

下面我們想要生成CPU狀態分析圖,調用go tool pprof http://localhost:3999/debug/pprof/profile

就會進入30秒的profile收集時間,在這段事件內猛刷新點擊go-tour瀏覽器上的頁面,盡量讓cpu占用性能產生數據。

(pprof) top10
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

golang中pprof的使用方法

上述就是小編為大家分享的golang中pprof的使用方法了,如果您也有類似的疑惑,不妨礙參照上述分析進行理解。如果想了解更多相關內容,請關注億速云行業資訊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蓝田县| 九龙县| 阿克苏市| 攀枝花市| 琼海市| 珠海市| 吉林市| 屯留县| 神池县| 洪雅县| 海口市| 岳阳县| 尚志市| 永平县| 铁岭市| 尖扎县| 丽水市| 高州市| 南华县| 班玛县| 台湾省| 阿尔山市| 龙川县| 禄丰县| 曲阳县| 泽州县| 邮箱| 山西省| 临漳县| 景宁| 景泰县| 双鸭山市| 胶南市| 开化县| 衢州市| 五寨县| 图们市| 航空| 芜湖县| 连山| 繁峙县|