在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
方法一: 内存分配器跟踪:GODEBUG=allocfreetrace=1 调度器追踪 SCHED 1004ms: gomaxprocs=4 idleprocs=0 threads=11 idlethreads=4 runqueue=8 [0 1 0 3] SCHED 2005ms: gomaxprocs=4 idleprocs=0 threads=11 idlethreads=5 runqueue=6 [1 5 4 0] SCHED 3008ms: gomaxprocs=4 idleprocs=0 threads=11 idlethreads=4 runqueue=10 [2 2 2 1] 第一个数字("1004ms")是从程序開始后的时间。 内存统计 Go 执行时能够通过 runtime.ReadMemStats 函数提供粗糙的内存统计。 使用:set GODEBUG=gctrace=1 / GODEBUG=gctrace=2 直接执行可执行文件:server.exe 格式:gc # @#s #%: #+...+# ms clock, #+...+# ms cpu, #->#-># MB, # MB goal, # P GC # 表示第几次GC @#s 表示程序開始多长时间运行的GC #% 表示程序開始GC时间占用的百分比(percentage of time spent in GC since program start) #+...+# 表示GC运行时CPU堵塞时间和 #->#-># MB 表示GC開始堆大小,结束堆大小,在活跃堆大小 # MB goal 表示目标对大小 # P 表示程序执行时CPU核数 演示样例 : gc 13 @1277.835s 0%: 0+1.0+0+1.0+1.0 ms clock, 0+1.0+0+0/1.0/0+3.0 ms cpu, 0->0->0 MB, 4 MB goal, 4 P 方法二: import _ "net/http/pprof" go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }() 在程序中加入以上代码. ----------------------------------------------------------- 使用以下的命令能够查看各项性能: go tool pprof http://localhost:6060/debug/pprof/heap 查看30秒内的cpu使用: go tool pprof http://localhost:6060/debug/pprof/profile 查看goroutime性能: go tool pprof http://localhost:6060/debug/pprof/block 查看5秒的执行trace. wget http://localhost:6060/debug/pprof/trace?seconds=5 在浏览器打开查看: http://localhost:6060/debug/pprof/ https://blog.golang.org/2011/06/profiling-go-programs.html 命令:go tool pprof /mnt/Go/src/main http://localhost:6060/debug/pprof/heap 输入list能够看到具体情况. 输入web 能够在web页面查看 此外我们也能够执行go tool pprof your-executable-name --dot profile-filename > heap.gv,这样将得到一个heap.gv文件,我们在graphviz里面打开这个文件将得到一个更具体的包含调用关系在内的内存消耗图。当然。我们假设仅仅须要一张图,也能够执行dot -Tpng heap.gv > heap.png将这个gv文件另存为png图,这样就能够像我一样,在以下展示剖析结果了。 三、使用pprof文件分析: import ( "runtime/pprof" // 引用pprof package "os" ) func main() { f, _ := os.Create("profile_file") pprof.StartCPUProfile(f) // 開始cpu profile,结果写到文件f中 defer pprof.StopCPUProfile() // 结束profile ... } 执行 执行程序,生成profile文件 分析 在命令行上执行: go tool pprof [binary] [profile] 进入pprof环境后。能够用help命令查看帮助信息 最经常使用的命令如top10,能够看最耗时的function 这里详解一下top命令的输出格式。比如: 14 2.1% 17.2% 58 8.7% std::_Rb_tree::find 各字段的含义依次是: 1. 採样点落在该函数中的次数 2. 採样点落在该函数中的百分比 3. 上一项的累积百分比 4. 採样点落在该函数,以及被它调用的函数中的总次数 5. 採样点落在该函数,以及被它调用的函数中的总次数百分比 6. 函数名 |
请发表评论