go学习(九)——Go tool pprof之runtime/pprof 的使用
来源:互联网 发布:贝克汉姆 知乎 编辑:程序博客网 时间:2024/06/06 06:56
测试环境:centos7 go1.9 go1.6 gvmv1.0.22
Go 中监控代码性能的有两个包:
- net/http/pprof
- runtime/pprof
这两个包都是可以监控代码性能的, 只不过net/http/pprof是通过http端口方式暴露出来的,内部封装的仍然是runtime/pprof。
1.CPU Profiling
Golang 提供了 pprof 包(runtime/pprof)用于输出运行时的 profiling 数据,这些数据可以被 pprof 工具(或者 go tool pprof,其为 pprof 的变种)使用。通常我们这样来使用 pprof 包:
// 定义 flag cpuprofilevar cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")func main() {flag.Parse()// 如果命令行设置了 cpuprofileif *cpuprofile != "" {// 根据命令行指定文件名创建 profile 文件f, err := os.Create(*cpuprofile)if err != nil {log.Fatal(err)}// 开启 CPU profilingpprof.StartCPUProfile(f)defer pprof.StopCPUProfile()}...
假定我们编写的一个程序 mytest 中加入了上述代码则可以执行并生成 profile 文件:
./mytest -cpuprofile=mytest.prof
这里,我们生成了 mytest.prof profile 文件。有了 profile 文件就可以使用 go tool pprof 程序来解析此文件:
go tool pprof mytest mytest.prof
pprof 程序中最重要的命令就是 topN,此命令用于显示 profile 文件中的最靠前的 N 个样本(samples)。
(pprof) top10Total: 2525 samples298 11.8% 11.8% 345 13.7% runtime.mapaccess1_fast64268 10.6% 22.4%2124 84.1% main.FindLoops251 9.9% 32.4% 451 17.9% scanblock178 7.0% 39.4% 351 13.9% hash_insert131 5.2% 44.6% 158 6.3% sweepspan119 4.7% 49.3% 350 13.9% main.DFS 96 3.8% 53.1% 98 3.9% flushptrbuf 95 3.8% 56.9% 95 3.8% runtime.aeshash64 95 3.8% 60.6% 101 4.0% runtime.settype_flush 88 3.5% 64.1% 988 39.1% runtime.mallocgc
2.runtime/pprof 的用法示例
这里的例子我们用 递归实现的斐波纳契数列来测试性能,斐波纳契数列 的代码如下
package main
import (
"flag"
"fmt"
"log"
"os"
"runtime/pprof"
)
var (
//定义外部输入文件名字
cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file.")
)
func main() {
log.Println("begin")
flag.Parse()
if *cpuprofile != "" {
f, err := os.Create(*cpuprofile)
if err != nil {
log.Fatal(err)
}
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
}
for i := 0; i < 30; i++ {
nums := fibonacci(i)
fmt.Println(nums)
}
}
//递归实现的斐波纳契数列
func fibonacci(num int) int {
if num < 2 {
return 1
}
return fibonacci(num-1) + fibonacci(num-2)
}
创建名字为testfibonacci的go文件,并写入上述代码,执行命令go build testfibonacci.go
运行程序的时候加一个--cpuprofile参数,比如./testfibonacci --cpuprofile=fibonacci.prof
这样程序运行的时候的cpu信息就会记录到XXX.prof中了。
下一步就可以使用这个prof信息做出性能分析图了(需要安装graphviz)。
查看prof文件:
使用go tool pprof (应用程序) (应用程序的prof文件),即:go tool pprof testfibonacci fibonacci.prof
进入到pprof,使用top命令可以查看样本数据,使用web命令就会生成svg文件:
参考链接:http://blog.csdn.net/zhonglinzhang/article/details/71191650
http://www.cnblogs.com/yjf512/archive/2012/12/27/2835331.html
https://studygolang.com/articles/3176
- go学习(九)——Go tool pprof之runtime/pprof 的使用
- go tool pprof
- go pprof
- 使用go tool pprof分析内存泄漏、CPU消耗
- go标准命令详解0.12 go tool pprof
- Golang性能调优(go-torch, go tool pprof)
- Go 程序的性能优化及 pprof 的使用
- go使用pprof做性能分析
- Go程序性能分析pprof
- Go程序性能分析pprof
- pprof 的使用
- fabric调试:go pprof查看内存
- 一个Ip2long函数,通过调用go tool pprof分析,竟发现内存分配了3G
- go学习之runtime
- golang pprof 使用
- golang pprof 使用
- golang pprof 使用
- GoLang pprof使用(一)
- redis工具类
- think5 获取器的妙用
- Spring+SpringMVC+mybatis+redis(一)
- java简单实现RabbitMQ
- Spring+SpringMVC+mybatis+redis(二)
- go学习(九)——Go tool pprof之runtime/pprof 的使用
- python 24点算数
- UVA
- Spring+SpringMVC+mybatis+redis(三)
- 权限Demo
- 安装sublime
- 一个mybatis分页工具类
- 简单网络判断
- EmojIcon的简单使用