golang开发安装go-torch火焰图操作步骤

目录
  • 安装
  • 使用
  • 另一种自定义显示方式
    • 代码修改
    • 使用
    • 查看

安装

1、 安装go-torch

go get github.com/uber/go-torch

2、安装FlameGraph

cd $GOPATH && git clone  https://github.com/brendangregg/FlameGraph.git

export PATH=$PATH:$GOPATH/FlameGraph

【这步一定要设置,生成火焰图时会用到】

3、安装graphviz (CentOS, Redhat)

yum install graphviz

在程序的包含mian函数的文件中添加相应代码

使用

package main
import (
"net/http"
"net/http/pprof"
)
func main() {
// 主函数中添加
go func(){
http.HandleFunc("/debug/pprof/block", pprof.Index)
http.HandleFunc("/debug/pprof/goroutine", pprof.Index)
http.HandleFunc("/debug/pprof/heap", pprof.Index)
http.ListenAndServe("0.0.0.0:8888", nil) //注意此处,遇到错误
}()
//你的代码
}

然后压测的时候,在go 的bin目录下找到go-torch,去运行,会把缓存的数据输出到文件中

./go-torch -u http://localhost:8080/debug/pprof/ -p > profile-local.svg
./go-torch -u http://localhost:8080/debug/pprof/heap -p > heap-local.svg

另一种自定义显示方式

代码修改

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>",
		lastRecord.RecvUDP, currSpeed.RecvUDP)
	writeBuf(&buf, "</table><p>Count time: %s</p><p>Time now: %s</p>",
		countTime.Format("2006-01-02 15:04:05"), time.Now().Format("2006-01-02 15:04:05"))
	buf.WriteString("</body></html>")
	return buf.String()
} 

以上就是golang开发安装go-torch火焰图操作步骤的详细内容,火焰图的效果网上很多,更多关于golang的资料请关注我们其它相关文章!

(0)

相关推荐

  • Go语言中通过Lua脚本操作Redis的方法

    前言 为了在我的一个基本库中降低与Redis的通讯成本,我将一系列操作封装到LUA脚本中,借助Redis提供的EVAL命令来简化操作. EVAL能够提供的特性: 可以在LUA脚本中封装若干操作,如果有多条Redis指令,封装好之后只需向Redis一次性发送所有参数即可获得结果 Redis可以保证Lua脚本运行期间不会有其他命令插入执行,提供像数据库事务一样的原子性 Redis会根据脚本的SHA值缓存脚本,已经缓存过的脚本不需要再次传输Lua代码,减少了通信成本,此外在自己代码中改变Lua脚本,执

  • Golang开发Go依赖管理工具dep安装验证实现过程

    目录 Go依赖管理工具 环境要求 目前版本 安装 验证 初始化 默认初始化 优先从$GOPATH初始化 Gopkg.toml Gopkg.lock 常用命令 dep ensure dep ensure -add dep ensure -update Go依赖管理工具 Go dependency management tool 环境要求 Golang >= 1.9Dep 目前版本 dep: version : devel build date : git hash : go version : g

  • 在Golang中使用Redis的方法示例

    周五上班的主要任务是在公司老平台上用redis处理一个队列问题,顺便复习了一下redis操作的基础知识,回来后就想着在自己的博客demo里,用redis来优化一些使用场景,学习一下golang开发下redis的使用. Redis简单介绍 简介 关于Redis的讨论,其实在现在的后台开发中已经是个老生常谈的问题,基本上也是后端开发面试的基本考察点.其中 Redis的背景介绍和细节说明在这里就不赘述.不管怎么介绍,核心在于Redis是一个基于内存的key-value的多数据结构存储,并可以提供持久化

  • golang开发go包依赖管理godep使用教程

    目录 介绍 安装 包管理使用 godep 拉取依赖 restore 用于开发 检出依赖 save godep 编译运行 build Godeps目录的作用 godep其他命令 介绍 godep是解决包依赖的管理工具,目前最主流的一种,原理是扫描记录版本控制的信息,并在go命令前加壳来做到依赖管理 godep 建议在 golang 1.6 以后使用 godep 依赖 vendor 具体查看 https://stackoverflow.com/questions/37237036/how-shoul

  • Go语言开发redis封装及简单使用详解

    目录 go redis 集合操作--sadd 安装redigo 带密码的redis操作 批量添加 无密码redis操作 redis封装包 参考 go redis 集合操作--sadd redis的go语言包,我们使用官方推荐的redigo,https://github.com/garyburd/redigo 安装redigo $ go get github.com/garyburd/redigo 带密码的redis操作 package main import ( "log" "

  • golang开发及数字证书研究分享

    目录 私钥的生成 RSA ECDSA DSA 给私钥上锁(加访问密码) 生成证书请求 go对dsa类型的证书 生成证书 坑 设置CA 签名算法的选择 代码时间 在go语言提供的系统包中包含了大量和数字证书有关的方法.在这些方法中就有私钥生成的方法.私钥解析的方法.证书请求生成的方法.证书生成的方法等等.通过这些方法应该能够实现和openssl命令类似的功能. 仿照openssl生成证书的流程(从私钥的生成->证书请求的生成->证书的生成)用go语言进行模拟. 私钥的生成 在go的x509包下有

  • golang开发安装go-torch火焰图操作步骤

    目录 安装 使用 另一种自定义显示方式 代码修改 使用 查看 安装 1. 安装go-torch go get github.com/uber/go-torch 2.安装FlameGraph cd $GOPATH && git clone  https://github.com/brendangregg/FlameGraph.git export PATH=$PATH:$GOPATH/FlameGraph [这步一定要设置,生成火焰图时会用到] 3.安装graphviz (CentOS, R

  • 使用anaconda的pip安装第三方python包的操作步骤

    相比于原生的python开发核心包,Anaconda已经集成了许多的第三方库,但是这在实际应用中是远远不够的,因此我们需要手动安装第三方库 使用pip可以快速的安装这些库 启动anaconda命令窗口: 开始> 所有程序> Anaconda Command Prompt 输入pip,可以查看pip指令的用法和相关的提示信息 pip install buitwith,可以开始安装buitwith库 以上这篇使用anaconda的pip安装第三方python包的操作步骤就是小编分享给大家的全部内容

  • CentOS 7 安装vsftpd 服务器的具体操作步骤

    在CentOS7上安装ftp服务器用于保存服务端上传的图片. 1.CentOS卸载vsftpd的方法 如果服务器上已经安装了vsftpd服务,配置出错需要卸载vsftpd服务. 1.1 查找vsftpd服务 [root@localhost /]# rpm -aq vsftpd 返回结果显示: vsftpd-3.0.2-21.el7.x86_64 #此处是查找vsftpd的返回结果 表示此服务期之前已经安装过vsftpd服务. 1.2 删除查找到的vsftpd服务 注:在卸载vsftpd之前,先停

  • Linux7.6二进制安装Mysql8.0.27详细操作步骤

    目录 一.环境准备 1.1 操作系统版本 1.2 磁盘空间 1.3 关闭防火墙 1.4 关闭 selinux 1.5 HOST解析 1.6 Mysql下载 二. yum安装及配置 2.1 挂载本地光盘镜像 2.2 配置yum源 2.3 安装依赖包 三.卸载MariaDB 四.安装 MySQL 4.1 用户及目录创建 4.2 用户及组 4.3 上传软件包并解压 五.环境变量配置 六.创建参数文件 七.数据库初始化 八.启动Mysql 九.登陆Mysql 十.修改密码 十一.远程登陆设置 一.环境准

  • Ubuntu上Vim安装NERDTree插件的详细操作步骤

    NERDTree是Vim的文件系统浏览器,使用此插件,用户可以直观地浏览复杂的目录层次结构,快速打开文件以进行读取或编辑,以及执行基本的文件系统操作.NERDTree源码在https://github.com/preservim/nerdtree . 这里通过Vundle安装NERDTree,Vundle是Vim软件包的缩写,是Vim插件管理器.Vundle源码在https://github.com/VundleVim/Vundle.vim . 安装Vundle: (1). 执行如下命令: mk

  • mysql第一次安装成功后初始化密码操作步骤

    把文件解压到一个目录下 这是解压后的目录 将my.ini文件考进去 双击打开my.ini 找到这两行更改成自己的解压路径保存 右键此电脑属性 找到高级系统设置配置环境变量 环境变量   新建 变量值是解压文件的路径 Path 单击path编辑 新建 之后 用管理员身份打开cmd进入文件路径 打开命令行窗口,在里面输入:mysqld --install 这个命令是安装服务, 执行完后, 提示英文的成功, 这时候你可以在你的 windows 服务中看到  MySQL 的服务,移除服务命令为:mysq

  • 在centos5下安装配置VNC的具体操作步骤

    今天在公司安装了一下vnc,晚上没事,就记录一下吧,要不下次安装就又得google了^_^ VNC简介不能免俗,简单说介绍下VNC吧.VNC,全称为Virtual Network Computing,是一个桌面共享系统.它的功能,类似于windows中的远程桌面功能.VNC使用了RFB(Remote FrameBuffer,远程帧缓冲)协议来实现远程控制另外一台计算机.它把键盘.鼠标动作发送到远程计算机,并把远程计算机的屏幕发回到本地. VNC技术与平台无关,VNC Viewer可以和VNC S

  • 在PyCharm中使用FMEObjects的操作步骤

    目录 在PyCharm中使用FMEObjects 操作步骤: 使用PyCharm 在PyCharm中使用FMEObjects 安装和配置下载并安装PyCharm社区版 Python FMEObjects项目不应该使用FME的内部Python,所以你可能需要从 www.python.org安装完整版的Python.您还可以使用ArcGIS安装的Python解释器. 操作步骤: 1.启动PyCharm 2.文件>“新建项目”以显示“创建项目”对话框 **3.将打开一个“新建项目”对话框窗口.**设置

  • Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例

    非关系型图数据库Neo4j简介 Neo4j是现今最火爆的图数据.在2010年发布,产品的发展势头还算不错. 作为图数据库,Neo4j最大的特点是关系数据的存储. 图数据库除了能够像普通的数据库一样存储一行一行的数据之外,还可以很方便的看出存储数据之间的关系信息. 适合存储"修改较少,查询较多,没有超大节点"的图数据. 图数据库Neo4j应用场景 社交网络 根据用户与其他用户的关系为用户推荐新的朋友.例如,在QQ中给你推荐朋友的朋友 . 智能推荐引擎 通过分析用户有哪些朋友.用户朋友喜好

随机推荐