go的pprof可以用来对服务的性能进行检测,其中net/http/pprof包用来检测web服务器的相关的性能的分析,包括goroutine的数量,heap的大小问题。

简单使用
package main import ( "fmt" "log" "net/http" _ "net/http/pprof" "time" ) func
main() {// 开启pprof go func() { log.Println(http.ListenAndServe("localhost:6060",
nil)) }() go hello() select {} } func hello() { for { go func() { fmt.Println(
"hello word") }() time.Sleep(time.Millisecond * 1) } }
如上所示,实现了一个简单函数,在for循环内部不停的创建go 并调用IO输出hello word。
在主函数的内部通过http.ListenAndServe(“localhost:6060”, nil) 监听6060端口,等待用户查看相关的性能信息.
一定要注意包含_ “net/http/pprof”这个包。。
以上代码就实现了一个pprof监控性能的代码,我们只需要在浏览器中执行http://localhost:6060/debug/pprof/
<http://localhost:6060/debug/pprof/>
就会得到相对应的程序的信息。
结果如下
由此可见,我们这个程序此时正有六个go协程正在运行。

进阶

上述是我们对pprof的简单使用,我们还可以通过使用go tool pprof 对这个程序进行更详尽的性能的分析。
主要分析的内容包括:
关于golang运行环境heap的信息、内存mem等
http://localhost:6060/debug/pprof/heap <http://localhost:6060/debug/pprof/heap>
关于pprof和cpu的相关信息
http://localhost:6060/debug/pprof/profile
<http://localhost:6060/debug/pprof/profile>

我们通过使用这两个命令,在我们的cmd下执行得到相关的信息。

1 使用callgrind 命令和qcachegrind查看性能

以查看cpu信息为例:

(1)启动我们的web服务器,
(2)在cmd下执行:go tool pprof http://localhost:6060/debug/pprof/profile
<http://localhost:6060/debug/pprof/profile> 命令,并等待30s,让其收集我们的web服务器的相关性能
(3)
执行完毕,他提示我们使用help命令查看相关的命令。这里我们可以使用callgrind命令将web服务的相关CPU信息输出为一个.out文件


需要注意的是我们需要安装qcachegrind <https://pan.baidu.com/s/1nxcdoWL>工具来查看我们输出的文件。
注意该.out文件存放到我们当前用户目录下,或者cmd所在的目录。。
在qcachegrind下,我们可以详细的看当前服务,那个函数耗费了多少的cpu和时间,找到我们的性能瓶颈。


2 使用web命令生成svg图

在30s等待之后,我们使用web命令生成svg图,查看软件的流程以及性能瓶颈

注意在生成svg时需要先安装graphviz-2.38 <https://pan.baidu.com/s/1bqh7ehD>
工具用来绘制图。安装graphviz-2.38时需要将bin目录放到path下。。最后将生成svg图片用浏览器打开查看即可。

3heap相关信息

* go tool pprof -inuse_space http://127.0.0.1:6060/debug/pprof/heap
<http://127.0.0.1:6060/debug/pprof/heap>
我们可以使用上述命令,查看内存中正在使用的一些内存信息,可以看到消耗内存的函数主要是哪些。


* go tool pprof -alloc_space http://127.0.0.1:8080/debug/pprof/heap
<http://127.0.0.1:8080/debug/pprof/heap>
使用上述命令查看内存对象分配的一些相关信息,从而得知,是什么地方创建对象消耗内存。


* top -cum
通过在上述命令,能够明确函数的调用过程中内存消耗的情况。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信