使用golang的pprof包监控程序

golang提供pprof包,可以监控golang程序的堆栈,cpu的耗时等性能信息。下边就说一下这个pprof包的使用。

1、引入

在两个地方可以引入:
“net/http/pprof”
“runtime/prof”
其中"net/http/pprof"是用“runtime/pprof” 包装了一下,然后再http端口暴露出来,让我们可以再浏览器查看程序的性能分析。“runtime/pprof”可以生成*.pprof的文件,然后根据这个文件做性能分析.

2、在代码中使用pprof了,实际运用中分三种情况

1)、如果程序本身就是web服务器,那么只需要通过代码:
import(
_“net/http/pprof”
)
,将pprof引入,然后在浏览器访问http://localhost:port/debug/pprof/就能看到当前web服务的状态,包括CPU占用情况和内存使用情况等

2)如果你的go程序不是web服务器,而是一个服务进程,那么你就需要开启一个goroutine来开启端口监听。
比如:
go func() {
log.Println(http.ListenAndServe(“localhost:6060”, nil))
}()
同样的访问http://localhost:6060/debug/pprof就可以查看程序运行的信息。

3)如果你的程序只是一个应用程序,那么你就需要使用“runtime/ppprof”包了。
官网给出的代码是这样的:

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=*.prof就可以再对应目录下生成一个.pprof的文件,程序运行的信息就都在这个文件里了。然后进入对应目录,运行命令:go tool pprof 加刚才生成的pprof文件命即可进入到pprof中,输入web命令,可以生成对应的svg文件。
第二种方式:
再使用“net/http/pprof”包的时候,我们同样可以使用go tool pprof命令来查看程序运行的情况。例如我们启动了一个简单的go服务器程序,监听再8080端口,那么我们就可以使用以下命令进入pprof的命令行:
利用这个命令查看堆栈信息:
go tool pprof http://localhost:6060/debug/pprof/heap
利用这个命令可以查看程序CPU使用情况信息:
go tool pprof http://localhost:6060/debug/pprof/profile
使用这个命令可以查看block信息:
go tool pprof http://localhost:6060/debug/pprof/block
进入pprof命令行,输入help,查看命令帮助,
topN命令可以查看占用前N 的线程或者函数,用svg可以生成svg图。
pprof简单使用就是这样了,掌握了使用方法,在实践中加以利用才是我们的目的,希望我写的这些可以对你有所帮助、
ps;因为我并没有真正的用golang写过大型的程序,也没有对这个包真正的用过,只是看了几篇文章和官网上的一些资料汇总了一下,难免犯形而上学的错误,欢迎指正!谢谢


作者:孤立皮皮虾
来源:CSDN
原文:https://blog.csdn.net/sxs_smile/article/details/53838352
版权声明:本文为博主原创文章,转载请附上博文链接

猜你喜欢

转载自blog.csdn.net/zhizhengguan/article/details/83715196