Go pprof的使用

马谦马谦马谦 Golang评论914字数 1423阅读4分44秒阅读模式

一、概述

gopprof工具可以用来监测进程的运行数据,用于监控程序的性能,对内存使用和CPU使用的情况统信息进行分析。

官方提供了两个包:runtime/pprofnet/http/pprof,前者用于普通代码的性能分析,后者用于web服务器的性能分析。

官方文档:

https://golang.org/pkg/runtime/pprof/

https://golang.org/pkg/net/http/pprof/#Index

https://github.com/google/pprof/blob/master/doc/pprof.md

二、runtime/pprof的使用

该包提供了一系列用于调试信息的方法,可以很方便的对堆栈进行调试。

通常用得多得是以下几个:

  • StartCPUProfile:开始监控cpu。
  • StopCPUProfile:停止监控cpu,使用StartCPUProfile后一定要调用该函数停止监控。
  • WriteHeapProfile:把堆中的内存分配信息写入分析文件中。

示例代码

编译运行,会根据入参生成两个对应的数据文件:

使用go tool pprof命令即可分析。

三、go tool pprof

生成数据文件后使用go tool pprof file进入交互式界面进行数据分析,输入help可以查看命令。

用法详见:pprof.md

1.top

命令格式:top [n],查看排名前n个数据,默认为10。

2.tree

命令格式:tree [n],以树状图形式显示,默认显示10个。

3.web

以web形式查看,在web服务的时候经常被用到,需要安装gv工具,官方网页:https://www.graphviz.org/。

linux用户使用yum install graphviz安装即可,当然,纯命令行界面是不能查看的。

windows用户下载msi包安装后需要把安装目录下的bin目录添加到环境变量才行。

Go pprof的使用-图片1

如果没有安装gv工具,使用会报错:

Cannot find dot, have you installed Graphviz?

exec: "firefox": executable file not found in $PATH

4.其他

其他的都是以不同形式展现出来,大同小异,以后有时间再测试。

四、web服务器监测

在web服务器中监测只需要在import部分加上监测包即可:

当服务开启后,在当前服务环境的https://ip:port/debug/pprof页面可以看到当前的系统信息:

Go pprof的使用-图片2

点击查看具体的信息:

Go pprof的使用-图片3

通常可以对服务器在一段时间内进行数据采样,然后分析服务器的耗时和性能:

使用该命令后会对服务进行30s的采样,这段时间内可以尽量多使用web服务,生成多一些统计数据。

使用web命令后会生成采样时间内每个系统调用的耗时分析,可以用来分析web服务的响应时间都用在哪了:

Go pprof的使用-图片4

 最后更新:2020-1-13
马谦马谦马谦
  • 本文由 马谦马谦马谦 发表于 2018年1月9日22:47:35
  • 转载请务必保留本文链接:https://www.dyxmq.cn/program/code/golang/golang-pprof.html
解决gvm工具无法下载安装包的问题 Golang

解决gvm工具无法下载安装包的问题

GVM(Go Version Manager)是一款用于管理和切换不同Go语言版本的工具。它允许用户在同一台计算机上轻松安装、使用和管理多个Go版本,同时还能确保项目之间的依赖关系井然有序。GVM的主...
goland配置proto文件搜索路径 Golang

goland配置proto文件搜索路径

默认情况下,goland(jetbrains家的软件:idea、pycharm、phpstorm以及webstorm都是一样)安装protobuf插件后只会在一个特定的库路径下搜索proto文件。如果...
国内几个优质的Go Module代理仓库服务 Golang

国内几个优质的Go Module代理仓库服务

一、简介 go module公共代理仓库,代理并缓存go模块。你可以利用该代理来避免DNS污染导致的模块拉取缓慢或失败的问题,加速你的构建。 简单来说就是国内访问被墙,go get无法在线获取到仓库,...
Golang中glog库的使用方法 Golang

Golang中glog库的使用方法

一、关于glog库 golang中的glog库是google著名开源C++日志库glog的golang版本,在golang默认日志库的基础上做了更进一层的封装使得该库能更贴近日常使用。项目首页为gol...
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证