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

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

ruisui884个月前 (02-07)技术分析21

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使用心得” 的相关文章

「Git迁移」三行命令迁移Git包含提交历史,分支,tag标签等信息

问题描述:公司需要将一个git远程服务器的全部已有项目迁移到一台新服务器的Gitlab中,其中需要包含全部的提交纪录,已有的全部分支与全部打tag标签,目前此工作已全部迁移完毕,特此记录一下操作步骤环境描述:1. 要迁移的远程Git:Gitblit2. 迁移目的Git:Gitlab3. 暂存代码的P...

Solid State Logic 发布低保真数字失真插件 Digicrush

Solid State Logic 宣布推出低保真数字失真插件 Digicrush ,他们最新的创意工具具有经典数字失真的粗糙、低保真特性,完美模拟早期数字音频的衰减和伪影。Digicrush 充满怀旧气息,深受经典数字采样器和效果器的影响,具有内置抖动、可调比特深度和采样率降低功能,是为音轨添加复...

Excel中的FILTER函数详细介绍及使用示例

在Excel中处理大量数据时,经常需要根据特定条件筛选出符合条件的数据行或列。这正是Excel的FILTER函数发挥作用的地方。FILTER函数是Excel中一个非常强大的工具,它可以基于一个或多个条件动态地过滤数据,使数据分析和报告制作变得更加高效和准确。本文将详细介绍FILTER函数的用法,并提...

vue-router是如何解析query参数呢? #前端

vue-router 中的 query 解析。1. 大家好,我是龙仔。今天来分享 vue-router 是如何解析快乐参数的,因为使用 vue 路由会传 query 参数和快乐参数,所以从 vue 的角度来看如何解析传递的快乐参数。2. 基础知识大家应知道,快乐参数结构如:a、b、c、a、b、c、a...

一起学Vue:路由(vue-router)

前言学习vue-router就要先了解路由是什么?前端路由的实现原理?vue-router如何使用?等等这些问题,就是本篇要探讨的主要问题。vue-router是什么路由是什么?大概有两种说法:从路由的用途上来解释路由就是指随着浏览器地址栏的变化,展示给用户的页面也不相同。从路由的实现原理上来解释路...

Vue从入门到实践 丨Vue-router基本使用

1. 什么是 vue-routervue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用,能够轻松的管理 SPA 项目中组件的切换。vue-router 的官方文档地址:https://router.vuejs.org/zh/2. vue-router 安装...