当前位置:首页 > 技术分析 > 正文内容

go语言中性能分析工具pprof使用心得

ruisui883个月前 (02-07)技术分析14

pprof是一个go程序性能分析工具,可以用于分析go程序的CPU使用率、内存使用情况等

项目中如何使用pprof

package main

import (
	"log"
	"net/http"
	_ "net/http/pprof" //初始化包
	"os"
	"runtime"
)

func main() {
	runtime.GOMAXPROCS(1)              //设置只使用1个cpu
	runtime.SetBlockProfileRate(1)     //开启对阻塞的追踪
	runtime.SetMutexProfileFraction(1) //开启对锁的追踪
	go func() {
		//启动一个http.server
		if err := http.ListenAndServe(":6060", nil); err != nil {
			log.Fatal(err)
		}
		os.Exit(0)
	}()
  //测试用
	for {	}
}

使用pprof

使用 go build 进行构建

浏览器打开
http://localhost:8080/debug/pprof/,即可看到如下页面


指标说明:
 allocs	内存分配情况的采样信息	可以用浏览器打开,但可读性不高
blocks	阻塞操作情况的采样信息	可以用浏览器打开,但可读性不高
cmdline	显示程序启动命令及参数	可以用浏览器打开,这里会显示 ./go-pprof-practice
goroutine	当前所有协程的堆栈信息	可以用浏览器打开,但可读性不高
heap	堆上内存使用情况的采样信息	可以用浏览器打开,但可读性不高
mutex	锁争用情况的采样信息	可以用浏览器打开,但可读性不高
profile	CPU 占用情况的采样信息	浏览器打开会下载文件
threadcreate	系统线程创建情况的采样信息	可以用浏览器打开,但可读性不高
trace 程序运行跟踪信息	浏览器打开会下载文件

用法一: 排查CPU占用过高

//命令
go tool pprof http://localhost:6060/debug/pprof/profile
//再输入 top
//再输入 list 标识名 即可查询到相关详细信息,如下图显示,可以找到哪里占用cpu比较高,可以看到,
//这里有一个大循环,是占用大量cpu的,


用法二: 排查占用内存过高

//命令一样,只不过 list的对象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/heap
//2. top  
//3. list 对象名


用法三: 排查频繁内存回收

通过如下命令 GODEBUG=gctrace=1 ./main | grep gc 可以查看到程序的内存回收情况

//命令一样,只不过 list的对象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/allocs
//2. top  
//3. list 对象名



用法四: 排查协程泄露

//命令一样,只不过 list的对象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/goruntine
//2. top  
//3. list 对象名


用法五: 排查锁的争用

//命令一样,只不过 list的对象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/mutex
//2. top  
//3. list 对象名


用法六: 排查阻塞的情况

//命令一样,只不过 list的对象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/block
//2. top  
//3. list 对象名


结语:

其实还有 火焰图等相关知识,但是本次遇到的bug,没有用到,这里就不写了,感兴趣的小伙伴,可以自己查资料哈

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1746.html

标签: pprof
分享给朋友:

“go语言中性能分析工具pprof使用心得” 的相关文章

快速上手React

web前端三大主流框架1、Angular大家眼里比较牛的框架,甚至有人说三大框架中只有它能称得上一个完整的框架,因为它包含的东西比较完善,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能。对于刚开始学习使用框架的小伙伴们,可以推荐这个框架,学会之后简直能颠覆之前你对前端开发的认...

Git分布式系统---Gitlab多人工作流程

前言在上一次推文中,我们已经很清楚的讲解了如何创建本地仓库、提交(push)项目到远程仓库以及从远程仓库clone(克隆)项目到本地的相关操作。大家可以先去看前面的推文(快速掌握Git分布式系统操作)点击查看目前无论你是否步入社会还是在校学生,都会使用Gitlab来进行团队的代码管理。(可以这样说:...

如何在GitLab上回退指定版本的代码?GitLab回退指定版本问题分析

在Git中,回退到指定版本并不是删除或撤销之前的提交,而是创建一个新的提交,该提交包含指定版本的内容。这意味着您需要将当前代码更改与指定版本之间的差异进行比较,并将其合并到一个新的提交中。如果您没有更新本地代码,并且您希望将 GitLab 仓库回退到指定版本,您可以使用以下命令:git fetchg...

快速掌握 Git:程序员必会的版本控制技巧

在现代软件开发中,版本控制系统(VCS)是开发人员不可或缺的工具。无论是个人项目,还是多人协作的团队开发,良好的版本控制都能确保代码管理的高效性与稳定性。而在版本控制系统中,Git 凭借其分布式、灵活性和高效性,成为了最流行的工具之一。几乎所有的开发团队都在使用 Git 来管理代码版本、协作开发和追...

el-table内容\n换行解决办法

问题请求到的数据带有换行符 '\n'但页面展示时不换行statusRemark: "\"1、按期完成计划且准确率100%,得100分;\n2、各项目每延误1天,扣1分;每失误1次或者员工投诉1次,扣3分,失误层面达到公司级影响较大的,该项绩效分数为0\"\n&...

你感动了吗?佳能超规格镜头 RF 24-105mm F2.8深度测评

如果要你选一支用作多题材创作的挂机镜头,那我相信很多人会选择24-105mm这个焦段的镜头。作为一支可以实现从广角到长焦的变焦镜头,24-105mm有着丰富的焦段选择。只是基于镜头体积以及光学结构上的限制,此前的24-105mm镜头只能恒定在F4的光圈。而佳能打破了这一限制,将实用焦段和恒定光圈完美...