Golang FlameGraph(火焰图)


声明:本文转载自https://my.oschina.net/xcxt/blog/1559487,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

简介

安装

go get github.com/uber/go-torch # 再安装 brendangregg/FlameGraph  export PATH=$PATH:/absolute/path/FlameGraph-master # 还需要安装一个graphviz用来画内存图 yum install graphviz 

代码修改

import "net/http" import _ "net/http/pprof" func main() {     // 主函数中添加     go func() { 		http.HandleFunc("/program/html", htmlHandler) // 用来查看自定义的内容 		log.Println(http.ListenAndServe("0.0.0.0:8080", nil)) 	}() } 

使用

# 用 -u 分析CPU使用情况 ./go-torch -u http://127.0.0.1:8080 # 用 -alloc_space 来分析内存的临时分配情况 ./go-torch -alloc_space http://127.0.0.1:8080/debug/pprof/heap --colors=mem # 用 -inuse_space 来分析程序常驻内存的占用情况; ./go-torch -inuse_space http://127.0.0.1:8080/debug/pprof/heap --colors=mem # 画出内存分配图 go tool pprof -alloc_space -cum -svg http://127.0.0.1:8080/debug/pprof/heap > heap.svg 

查看

使用浏览器查看svg文件,程序运行中,可以登录 http://127.0.0.1:10086/debug/pprof/ 查看程序实时状态 在此基础上,可以通过配置handle来实现自定义的内容查看,可以添加Html格式的输出,优化显示效果

func writeBuf(buffer *bytes.Buffer, format string, a ...interface{}) { 	(*buffer).WriteString(fmt.Sprintf(format, a...)) } func htmlHandler(w http.ResponseWriter, req *http.Request) { 	io.WriteString(w, statusHtml()) } // 访问 localhost:8080/program/html 可以看到一个表格,一秒钟刷新一次 func statusHtml() string { 	var buf bytes.Buffer 	buf.WriteString("<html><meta http-equiv=\"refresh\" content=\"1\">" + 		"<body><h2>netflow-decoder status count</h2>" + 		"<table width=\"500px\" border=\"1\" cellpadding=\"5\" cellspacing=\"1\">" + 		"<tr><th>NAME</th><th>TOTAL</th><th>SPEED</th></tr>") 	writeBuf(&buf, "<tr><td>UDP</td><td>%d</td><td>%d</td></tr>", 		total, speed) 	... 	buf.WriteString("</table></body></html>") 	return buf.String() }  

火焰图的效果网上很多,下一篇介绍基本的调优过程

火焰图效果

输入图片说明

火焰图自下而上是函数的调用关系,底下的一个方块是入口,对应其上面的方块是他直接或者间接调用到的,长度是运行时所占用的CPU时长,颜色没有特别的意义

pprof内存分配图效果

输入图片说明

从上到下是调用关系,如箭头所示,表示给每个函数【累计】分配了多少内存,包括它自己占用多少以及向下调用时分配了多少。从这个就可以看出程序中哪个地方最消耗内存,最底下没有名字的方块是这个函数内,每次向系统申请内存的大小

实际图片是svg格式的,可以无限方法,这里只是看个大概(人为打码)。

本文发表于2017年11月02日 12:35
(c)注:本文转载自https://my.oschina.net/xcxt/blog/1559487,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 3904 讨论 0 喜欢 1

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1