当前位置: 首页 > article >正文

pprof简单使用

1. 什么是 pprof?

pprof 是 Go 语言内置的性能分析工具。它能够帮助开发者收集 CPU、内存、goroutine 等资源的使用情况,生成性能报告并提供可视化功能。pprof 提供了全面的性能分析能力,是排查性能瓶颈、优化代码的利器。

2. pprof 使用场景

  • CPU 分析:查看哪些函数消耗了大量的 CPU 时间。
  • 内存分析:检查哪些对象占用了大量内存,分析内存分配频率。
  • Goroutine 分析:查看 Goroutines 的状态及堆栈信息,排查死锁等并发问题。
  • 阻塞分析:跟踪 goroutines 被阻塞的位置,帮助找出锁竞争和其他阻塞行为。

3. 如何在 Go 中启用 pprof?

在 Go 应用中启用 pprof 只需简单引入内置的 net/http/pprof 包,并启动 HTTP 服务。以下是一个最小的例子:

package main

import (
    "log"
    "net/http"
    _ "net/http/pprof"  // 引入 pprof 包
)

func main() {
    go func() {
        log.Println(http.ListenAndServe("localhost:6060", nil)) // 开启 pprof 监听
    }()
    // 模拟一个 CPU 密集型任务
    for i := 0; i < 10000000; i++ {
    }
}

此代码将在 localhost:6060 启动一个 HTTP 服务器,可以通过浏览器访问不同的 pprof 分析页面。

4. pprof 常用的 HTTP 路径

访问 localhost:6060 时,有几个常用路径可以用来生成不同的分析报告:

  • /debug/pprof/: 提供所有的分析报告入口,包括 CPU、内存、goroutine 等。
  • /debug/pprof/profile: 生成 CPU 性能报告,默认为 30 秒的采样。
  • /debug/pprof/heap: 生成内存分配的报告,帮助了解内存使用情况。
  • /debug/pprof/goroutine: 查看所有 Goroutines 的当前状态和堆栈信息。
  • /debug/pprof/block: 查看 goroutines 阻塞情况。
  • /debug/pprof/trace?seconds=5: 获取程序执行的 trace 日志。

5. 使用 go tool pprof 命令

在代码运行的同时,可以使用 go tool pprof 命令分析生成的报告。以 CPU 性能分析为例:

go tool pprof http://localhost:6060/debug/pprof/profile

执行以上命令会下载 CPU 性能报告,并进入交互式命令行。常用命令包括:

  • top: 显示消耗 CPU 时间最多的函数列表。
  • list [函数名]: 显示指定函数的源码及其耗时。
  • web: 生成图形化的性能分析报告(需要 Graphviz 支持)。

内存分析示例 为了分析内存,访问以下地址:

 go tool pprof http://localhost:6060/debug/pprof/heap

top 和 list 的命令查看内存分配最多的地方。

(pprof) top
(pprof) list main

在这里插入图片描述

6. 可视化分析

执行

go tool pprof -http=:8081 cpu.pprof

浏览器访问 http://localhost:8081,查看完整的可视化性能分析结果。

其他

性能调优 https://developer.aliyun.com/article/1174056


http://www.kler.cn/a/311955.html

相关文章:

  • 16008.行为树(五)-自定义数据指针在黑板中的传递
  • 软件测试——认识测试
  • 工业通信协议对比:OPC-UA、Modbus、MQTT、HTTP
  • Android 开发指南:初学者入门
  • docker compose 多个 Dockerfile
  • 【信号处理】基于联合图像表示的深度学习卷积神经网络
  • 五、I/O与网络编程-5.2、网络编程
  • 全国各省山峰分布SHP数据
  • 【深度学习】(3)--损失函数
  • git使用“保姆级”教程1——简介及配置项设置
  • Kafka基础概念
  • Vivado FIR IP 详解 (一)
  • yolo车位数据集
  • MATLAB 图像处理入门详解
  • 油烟机制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
  • 2.计算机网络基础
  • C# 比较对象新思路,利用反射技术打造更灵活的比较工具
  • 基于 jenkins 的持续集成、持续部署方案
  • 自然语言处理入门:从基础概念到实战项目
  • 计算机毕业设计 教师科研信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • Redis性能测试redis-benchmark
  • ORACLE SAVEPOINT保存点
  • Vue 中常用的基础指令
  • 一、编译原理(引论)
  • 【Python技术】使用akshare、scikit-learn预测股票涨跌简单例子
  • web基础—dvwa靶场(九)Weak Session IDs