pprof介绍

臭大佬 2024-02-19 11:19:14 494
Go 
简介 pprof介绍

Gin中使用

import (
    "net/http"
    _ "net/http/pprof"
    )
r.GET("/debug/pprof/*any", gin.WrapH(http.DefaultServeMux))

浏览器查看

浏览器中输入地址localhost/debug/pprof
profiles下分别是block(阻塞情况)、goroutine数量、heap(堆)、mutex(锁)和threadcreate(创建的物理线程)
这里是调用Go底层的runtime.MemStats结构体获取,该结构体相关字段解释如下:

Alloc uint64 //golang语言框架堆空间分配的字节数
TotalAlloc uint64 //从服务开始运行至今分配器为分配的堆空间总 和,只有增加,释放的时候不减少
Sys uint64 //服务现在系统使用的内存
Lookups uint64 //被runtime监视的指针数
Mallocs uint64 //服务malloc heap objects的次数
Frees uint64 //服务回收的heap objects的次数
HeapAlloc uint64 //服务分配的堆内存字节数
HeapSys uint64 //系统分配的作为运行栈的内存
HeapIdle uint64 //申请但是未分配的堆内存或者回收了的堆内存(空闲)字节数
HeapInuse uint64 //正在使用的堆内存字节数
HeapReleased uint64 //返回给OS的堆内存,类似C/C++中的free。
HeapObjects uint64 //堆内存块申请的量
StackInuse uint64 //正在使用的栈字节数
StackSys uint64 //系统分配的作为运行栈的内存
MSpanInuse uint64 //用于测试用的结构体使用的字节数
MSpanSys uint64 //系统为测试用的结构体分配的字节数
MCacheInuse uint64 //mcache结构体申请的字节数(不会被视为垃圾回收)
MCacheSys uint64 //操作系统申请的堆空间用于mcache的字节数
BuckHashSys uint64 //用于剖析桶散列表的堆空间
GCSys uint64 //垃圾回收标记元信息使用的内存
OtherSys uint64 //golang系统架构占用的额外空间
NextGC uint64 //垃圾回收器检视的内存大小
LastGC uint64 // 垃圾回收器最后一次执行时间。
PauseTotalNs uint64 // 垃圾回收或者其他信息收集导致服务暂停的次数。
PauseNs [256]uint64 //一个循环队列,记录最近垃圾回收系统中断的时间
PauseEnd [256]uint64 //一个循环队列,记录最近垃圾回收系统中断的时间开始点。
NumForcedGC uint32 //服务调用runtime.GC()强制使用垃圾回收的次数。
GCCPUFraction float64 //垃圾回收占用服务CPU工作的时间总和。如果有100个goroutine,垃圾回收的时间为1S,那么就占用了100S。
BySize //内存分配器使用情况

go tool pprof 命令行工具

查看内存使用情况

# 在bash控制台执行如下命令,查看内存使用情况
go tool pprof  http://localhost:80/debug/pprof/heap

查看cpu使用情况

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

下载记录

wget http://ip:admin_port/debug/pprof/heap?debug=1
wget http://ip:admin_port/debug/pprof/goroutine?debug=1
wget http://ip:admin_port/debug/pprof/goroutine?debug=2

debug=1就是获取服务的数目和大致信息
debug=2获取服务详细信息,分别在本地生成了debug=1和debug=2文件

查看goroutine?debug=1文件

本文整理自:https://blog.csdn.net/weixin_45565886/article/details/132090495