使用golang的pprof包对程序进行性能分析

2023-10-27

golang提供pprof包,可以监控golang程序的堆栈,cpu的耗时等性能信息。下边就说一下这个pprof包的使用。
1,首先是引入,在两个地方可以引入:
“net/http/pprof”
"runtime/prof"
其中"net/http/pprof"是用“runtime/pprof” 包装了一下,然后再http端口暴露出来,让我们可以再浏览器查看程序的性能分析。“runtime/pprof”可以生成*.pprof的文件,然后根据这个文件做性能分析.
2,然后就是在代码中使用pprof了,实际运用中分三种情况:
1)
如果程序本身就是web服务器,那么只需要通过代码:
import(
_"net/http/pprof"
)
,将pprof引入,然后在浏览器访问http://localhost:port/debug/pprof/就能看到当前web服务的状态,包括CPU占用情况和内存使用情况等
2)
如果你的go程序不是web服务器,而是一个服务进程,那么你就需要开启一个goroutine来开启端口监听。
比如:
go func() {
        log.Println(http.ListenAndServe("localhost:6060", nil)) 
}()
同样的访问http://localhost:6060/debug/pprof就可以查看程序运行的信息。
3)如果你的程序只是一个应用程序,那么你就需要使用“runtime/ppprof”包了。
官网给出的代码是这样的:
var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")


func main() {
    flag.Parse()
    if *cpuprofile != "" {
        f, err := os.Create(*cpuprofile)
        if err != nil {
            log.Fatal(err)
        }
        pprof.StartCPUProfile(f)
        defer pprof.StopCPUProfile()
    }
,然后我们在运行这个程序的时候加上一个参数--cpuprofile=*.prof就可以再对应目录下生成一个.pprof的文件,程序运行的信息就都在这个文件里了。然后进入对应目录,运行命令:go tool pprof 加刚才生成的pprof文件命即可进入到pprof中,输入web命令,可以生成对应的svg文件。
第二种方式:
再使用“net/http/pprof”包的时候,我们同样可以使用go tool pprof命令来查看程序运行的情况。例如我们启动了一个简单的go服务器程序,监听再8080端口,那么我们就可以使用以下命令进入pprof的命令行:
利用这个命令查看堆栈信息:
go tool pprof http://localhost:6060/debug/pprof/heap
利用这个命令可以查看程序CPU使用情况信息:
go tool pprof http://localhost:6060/debug/pprof/profile
使用这个命令可以查看block信息:
go tool pprof http://localhost:6060/debug/pprof/block
进入pprof命令行,输入help,查看命令帮助,
topN命令可以查看占用前N 的线程或者函数,用svg可以生成svg图。
pprof简单使用就是这样了,掌握了使用方法,在实践中加以利用才是我们的目的,希望我写的这些可以对你有所帮助、
ps;因为我并没有真正的用golang写过大型的程序,也没有对这个包真正的用过,只是看了几篇文章和官网上的一些资料汇总了一下,难免犯形而上学的错误,欢迎指正!谢谢
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用golang的pprof包对程序进行性能分析 的相关文章

  • go踩坑——no required module provides package go.mod file not found in current directory or any parent

    背景 准备运行下面代码 package main import github com gin gonic gin func main 创建一个默认的路由引擎 r gin Default GET 请求方式 hello 请求的路径 当客户端以G
  • golang之跨语言ipc通信

    1 golang之跨语言ipc通信 文章目录 1 golang之跨语言ipc通信 1 1 unix domain Socket unix域套接字 介绍 1 2 IPC SOCKET通信 1 2 1 函数及地址定义介绍 1 2 2 UNIX
  • go-zero使用Etcd进行服务注册代码分析

    代码分析 github com tal tech go zero v1 2 3 core discov publisher go package discov import github com tal tech go zero core
  • Go语言实现区块链与加密货币-Part3(交易优化,单机模拟多节点通信)

    交易 二 在这个系列文章的一开始 我们就提到了 区块链是一个分布式数据库 不过在之前的文章中 我们选择性地跳过了 分布式 这个部分 而是将注意力都放到了 数据库 部分 到目前为止 我们几乎已经实现了一个区块链数据库的所有元素 今天 我们将会
  • Golang-使用 goroutine 运行闭包的“坑”

    介绍 在 Go 语言中 函数支持匿名函数 闭包就是一种特殊的匿名函数 它可以用于访问函数体外部的变量 需要注意的是 在 for range 中 使用 goroutine 执行闭包时 经常会掉 坑 因为匿名函数可以访问函数体外部的变量 而 f
  • golang:环境变量GOPROXY和GO111MODULE设置

    我们安装完golang后 我们在windows的cmd命令下就可以直接查看和使用go命令和环境变量了 同样的在linux下可以在控制台使用 如下图所示 C Users lijie1 gt go env set GO111MODULE set
  • goland环境配置

    goland modules环境配置 下载和安装goland 环境配置 配置环境变量GOPATH 配置go modules GOPROXY代理的系统变量 工程目录中新建三个工作目录 goland中启用go modules 新建一个go程序
  • Go_接口、多态、接口继承、空接口、类型断言

    接口 接口是把所有具有共性的方法定义在一起 是方法集 任何类型实现了接口中所有的方法 就是实现了这个接口 接口可以实现多态 接口传递的是地址值 接口定义及调用 定义格式 tepe 接口名 interface 方法名 参数 返回值 调用格式1
  • Golang三剑客之Pflag、Viper、Cobra

    如何构建应用框架 想知道如何构建应用框架 首先你要明白 一个应用框架包含哪些部分 在我看来 一个应用框架需要包含以下 3 个部分 命令行参数解析 主要用来解析命令行参数 这些命令行参数可以影响命令的运行效果 配置文件解析 一个大型应用 通常
  • 如何分析 goroutine 的数量

    基本上我想知道我的程序是否随着时间的推移而泄漏 goroutine 所以 我想看看随着时间的推移有多少 goroutine 正在运行 有什么办法可以通过pprof 我已经搞定了go tool pprof http localhost 888
  • Go 语言输出文本函数详解

    Go语言拥有三个用于输出文本的函数 Print Println Printf Print 函数以其默认格式打印其参数 示例 打印 i 和 j 的值 package main import fmt func main var i j stri
  • 基于Go语言实现简易Web应用

    目录 前言 Go语言特点 写在使用Go语言实现Web应用前面 创建Web服务器 声明一个结构体操作 加入中间件的使用 使用静态文件服务器 最后 前言 在编程语言中 近几年问世的几个新语言都是非常不错的 比如Go Python Rust等等
  • 有哪些不错的 Golang 开源项目?

    目前人在字节做 Go 开发 寻找 Golang 开源项目学习目的可能是 想学习或者提高自己对 Go 项目的组织和编排能力 想学习 Go 项目的框架设计 想在一些 Go 语法上细节的优化和进阶 我推荐两个项目 一 tinode 这是一个开源的
  • 【go语言开发】loglus日志框架的使用

    本文将简单介绍loglus框架的基本使用 并给出demo 文章目录 前言 Loglus常见用法 自定义日志级别 使用字段钩子 输出到多个位置 使用钩子实现自定义日志处理 demo
  • go-zero 开发入门-加法客服端示例

    定义 RPC 接口文件 接口文件 add proto 的内容如下 syntax proto3 package add 当 protoc gen go 版本大于 1 4 0 时需加上 go package 否则编译报错 unable to d
  • go-zero开发入门之网关往rpc服务传递数据1

    go zero 的网关往 rpc 服务传递数据时 可以使用 headers 但需要注意前缀规则 否则会发现数据传递不过去 或者对方取不到数据 go zero 的网关对服务的调用使用了第三方库 grpcurl 入口函数为 InvokeRPC
  • go-zero 的 etcd 配置

    实现代码在 core discov config go 文件中 type EtcdConf struct Hosts string Key string ID int64 json optional User string json opt
  • [每周一更]-(第55期):Go的interface

    参考地址 https juejin cn post 6978322067775029261 https gobyexample com interfaces https go dev tour methods 9 介绍下Go的interfa
  • Golang拼接字符串性能对比

    g o l a n g golang g o l an g
  • 无法将 go tool pprof 与现有服务器一起使用

    我有一个现有的 http 服务器 我想对其进行分析 我已经包括了 net http pprof 到我的导入 并且我已经运行了 http 服务器 router createRouter server http Server Addr 8080

随机推荐

  • 苹果发布全球首款5nm芯片A14!性能提升40%,新iPad Air率先搭载

    边策 贾浩楠 萧箫 杨净 发自 凹非寺 量子位 报道 公众号 QbitAI 也是罕见 苹果的新品发布会 新一代iPhone没亮相 倒是把最新最强的AI芯片发布了 没错 今天苹果没有发布iPhone 12 但是A14芯片还是意外亮相 集成11
  • 基于小程序+C#制作一个考试答题小程序

    基于小程序和C 语言 你可以使用微信小程序开发工具和Visual Studio进行开发 以下是开发考试答题小程序的基本步骤 需求分析和设计 首先 你需要明确考试答题小程序的功能和界面设计 例如 考试题目的类型 数量和难度 用户的身份验证 答
  • 10、Python3 实战之ORM

    10 Python3 实战之ORM 1 全局变量与局部变量 全局变量与局部变量两者的本质区别就是在于作用域用通俗的话来理解的话 全局变量是在整个py文件中声明 全局范围内都可以访问 局部变量是在某个函数中声明的 只能在该函数中调用它 不能在
  • 修改element里form的样式

    1 改变表单中的某项label的样式 在assets文件夹下新建myform css文件 itemlabel el form item label font size 22px 在main js全局引入myform css文件 导入myfo
  • redis集群配置(Mac)

    主要解决在Mac进行redis的集群安装及配置 包括对集群 节点 槽 slot 键的基本命令使用 以及常见错误 版本 redis 5 3 系统 mac 10 前期准备 目录结构 mkdir cluster test cd cluster t
  • Failed to launch emulator 和 Failed to install the app解决方法

    1 按照react native官网配置好android开发环境 创建一个新项目 然后在vscode使用npm start和npm run android 运行打包的时候 报了上面两个错误 这是在创建好Device Manager中模拟手机
  • 互联网摸鱼日报(2023-03-06)

    互联网摸鱼日报 2023 03 06 InfoQ 热门话题 Snap首席信息安全官 我给软件供应链风险打 9 9 分 满分 10 分 技术深度解析 H 266 VVC 标准之量化技术 字节新一代解码器 BVC 帮助 H 266 VVC 标准
  • CMake编译opencv4.6

    openCV系列文章目录 文章目录 openCV系列文章目录 前言 一 准备工作 二 使用步骤 1 使用CMake编译openCV 总结 前言 最近在项目中遇到图片处理 一拍脑袋就想到大名鼎鼎的opencv 一 准备工作 1 openCV官
  • STM32中实现OLED多级菜单(支持修改参数)

    STM32中实现OLED多级菜单 目录 STM32中实现OLED多级菜单 一 完整工程源码下载 二 硬件连接 1 OLED12864 2 按键 3 蜂鸣器 三 效果展示 1 图片效果 2 视频效果 四 核心代码 1 gui h文件 2 gu
  • Redis(三)持久化

    RDB Redis DataBase Redis使用操作系统的多进程 COW Copy On Write 机制来实现快照持久化 Redis在持久化时会调用 glibc 的函数fork产生一个子进程 快照持久化完全交给子进程来处理 父进程继续
  • Zotero查看文献条目所属的分类

    Zotero是一个开源的文献管理软件 不光功能强大还支持插件扩展 但是很多Zotero用户可能会经常面临一个困境 就是不能很方便的确定某个文献条目具体属于哪些文件夹 如通过关键字在整个文献库搜索到某篇文献时 如果想看与该文献很相关的文献 定
  • OpenCV 验证码图像增强处理 一、滤波增强

    前言 图像增强是对图像进行处理 使其比原始图像更适合于特定的应用 它需要与实际应用相结合 对于图像的某些特征如边缘 轮廓 对比度等 图像增强是进行强调或锐化 以便于显示 观察或进一步分析与处理 图像增强的方法是因应用不同而不同的 有的小伙伴
  • WSL2默认DNS配置导致无法访问网络

    问题分析 1 进入wsl ping www baidu com 不通 2 本机cmd ping www baidu com 正常 3 把本机ping 百度的ip拿出来 用wsl直接ping 百度的ip正常 通过此步骤基本可以判断是WSL2默
  • 【GitHub.io/Github Pages使用教程】从头开始搭建自己的Github Pages,打造个人博客网站,展示个人简历、项目、文档或想要与世界共享的任何其他内容

    巨人半边莲 如果你曾征服乞力马扎罗山 留意过海拔 3 657 4 267 米处的尖顶植物 这种植物有时形似绿色大柱子 或 花序 从中间长出花序 那么你就可能看到许多巨人半边莲 这些植物生长在非洲最高山上 事实上 巨人半边莲是乞力马扎罗山上发
  • 基于Matlab的2ASK、2PSK性能仿真

    这里我们将简单的在Matlab中进行2ASK与2PSK的仿真 比较实际误码率与理论误码率 最终做出相应的曲线 2ASK的仿真 我们首先来2ASK的看一下程序框图 产生 0 1 随机数序列这里我们使用的是Matlab中randi imin i
  • Thinkphp5 联表(联合、关联、join)查询

    Db table think artist gt alias a gt join think work w a id w artist id gt join think card c a card id c id gt select joi
  • ps2020闪退_Adobe Photoshop 2020总是打不开,闪退,怎么回事,解决方法

    尽管还没有到2020年 但adobe公司更新软件的步伐没有停止 adobe 2020全家桶系列软件已经发布 其中就包括大家最喜欢的图像设计大师Photoshop 2020 我在第一时间也给大家分享了Photoshop2020简体中文版 许多
  • 微分动态规划的基本思想

    吴恩达cs229第19课 微分动态规划这一部分 看了两遍才看明白 赶紧记下来 微分动态规划是基于LQR 线性二次型 的 后者能够比较简洁地计算最优策略 但要基于一个前提 就是 t 1 时刻的状态 是 t 时刻的状态和 t 时刻采取行为的线性
  • LaTeX常用语法查询(自用)

    文章目录 LaTex文档结构 添加作者 标题 日期 章节和段落 插入目录 插入数学公式 两种插入模式 上下标和空格 根式与分式 符号 括号 省略号 矩阵 插入图片 插入表格 编辑器 离线编辑 在线编辑 分点 itemize 参考文献插入链接
  • 使用golang的pprof包对程序进行性能分析

    golang提供pprof包 可以监控golang程序的堆栈 cpu的耗时等性能信息 下边就说一下这个pprof包的使用 1 首先是引入 在两个地方可以引入 net http pprof runtime prof 其中 net http p