首页 > 系统相关 >[转发] Go pprof内存指标含义备忘录

[转发] Go pprof内存指标含义备忘录

时间:2023-12-28 16:26:10浏览次数:37  
标签:字节数 pprof HeapAlloc 内存 Go GC

原文链接 Go pprof内存指标含义备忘录

最近组内一些Go服务碰到内存相关的问题,所以今天抽时间看了下Go pprof内存指标的含义,为后续查问题做准备。
内容主要来自于Go代码中对这些字段的注释,加自己的理解。理解不对的地方欢迎指正。

// https://github.com/golang/go/blob/master/src/runtime/mstats.go#L150

// 总共从OS申请的字节数
// 是下面各种XxxSys指标的总和。包含运行时的heap、stack和其他内部数据结构的总和。
// 它是虚拟内存空间。不一定全部映射成了物理内存。
Sys

// 见`Sys`
HeapSys

// 还在使用的对象,以及不使用还没被GC释放的对象的字节数
// 平时应该平缓,gc时可能出现锯齿
HeapAlloc

// 正在使用的对象字节数。
// 有个细节是,如果一个span中可包含多个object,只要一个object在使用,那么算的是整个span。
// `HeapInuse` - `HeapAlloc`是GC中保留,可以快速被使用的内存。
HeapInuse

// 已归还给OS的内存。没被堆再次申请的内存。
HeapReleased

// 没被使用的span的字节数。
// 这部分内存可以被归还给OS,并且还包含了`HeapReleased`。
// 可以被再次申请,甚至作为栈内存使用。
// `HeapIdle` - `HeapReleased`即GC保留的。
HeapIdle

/// ---

// 和`HeapAlloc`一样
Alloc

// 累计的`Alloc`
// 累计的意思是随程序启动后一直累加增长,永远不会下降。
TotalAlloc

// 没什么卵用
Lookups = 0

// 累计分配的堆对象数
Mallocs

// 累计释放的堆对象数
Frees

// 存活的对象数。见`HeapAlloc`
// HeapObjects = `Mallocs` - `Frees`
HeapObjects

// ---
// 下面的XxxInuse中的Inuse的含义,和XxxSys中的Sys的含义,基本和`HeapInuse`和`HeapSys`是一样的
// 没有XxxIdle,是因为都包含在`HeapIdle`里了

// StackSys基本就等于StackInuse,再加上系统线程级别的栈内存
Stack = StackInuse / StackSys

// 为MSpan结构体使用的内存
MSpan = MSpanInuse / MSpanSys

// 为MCache结构体使用的内存
MCache = MCacheInuse / MCacheSys

// 下面几个都是底层内部数据结构用到的XxxSys的内存统计
BuckHashSys
GCSys
OtherSys

// ---
// 下面是跟GC相关的

// 下次GC的触发阈值,当HeapAlloc达到这个值就要GC了
NextGC

// 最近一次GC的unix时间戳
LastGC

// 每个周期中GC的开始unix时间戳和结束unix时间戳
// 一个周期可能有0次GC,也可能有多次GC,如果是多次,只记录最后一个
PauseNs
PauseEnd

// GC次数
NumGC

// 应用程序强制GC的次数
NumForcedGC

// GC总共占用的CPU资源。在0~1之间
GCCPUFraction

// 没被使用,忽略就好 
DebugGC

标签:字节数,pprof,HeapAlloc,内存,Go,GC
From: https://www.cnblogs.com/yzhch/p/17932934.html

相关文章

  • django 网页引用,路由分发
    1,网页引用1.1HelloWorld目录底下创建templates目录并建立runoob.html文件1.2修改HelloWorld/settings.py,修改TEMPLATES中的DIRS为 [os.path.join(BASE_DIR,'templates')]  2,路由分发#总路由fromapp01importurlsasapp01_urlsfromapp02importurlsas......
  • django 下拉列表
    1,html原生代码点击跳转<from><selectοnchange="window.location=this.value;"><optionvalue="a.html">用户管理</option><optionvalue="b.html">用户</option></select></form>注意onchange部分,这样即......
  • 【golang】怎么在Go语言中实现锁机制
    Go语言的锁在Go语言中,最常用的锁是互斥锁(Mutex)。互斥锁是一种特殊的二进制信号量,用于控制对共享资源的访问。Go语言通过标准库中的"sync"包提供了互斥锁的功能。互斥锁的类型定义如下:type Mutex struct {    state int32    sema  uint32}其中state字段用于记......
  • 【Golang】Golang的跳一跳
    一、基本概念在Go语言中,代码跳转是指从一个位置跳转到另一个位置。一般而言,我们可以通过函数调用进行代码跳转,也可以通过goto语句进行跳转。不同的跳转方式有不同的适用场景。二、函数调用函数是Go语言中的基本构建块之一。调用函数时,程序的执行流程会跳转到被调用的函数中,并在......
  • 【golang】Go语言实现数据转发功能
    首先,我们需要考虑数据实体的格式。在许多情况下,使用JSON格式最为方便。Go语言中有一个标准库“encoding/json”可以提供JSON编解码功能。我们可以使用它来将我们的数据序列化为JSON格式,并将其发送到目标组件中。接下来,我们需要选择一种合适的网络协议来实现数据传输。常用的协议......
  • vue前端node内存溢出问题解决
    前端项目运行时,如果经常运行慢,崩溃停止服务,报如下错误:FATALERROR:CALL_AND_RETRY_LASTAllocationfailed-JavaScriptheapoutofmemory(JavaScript堆内存不足) 原因:因为在Node中,通过JavaScript使用内存时只能使用部分内存(64位系统:1.4GB,32位系统:0.7GB),这个时候,如......
  • 【golang】Go语言中interface类型怎么使用
    1、Go语言中interface类型的定义 在Go语言中,interface类型是一个抽象的类型,它是一组方法签名的集合,只要某个类型实现了这些方法,它就属于该interface类型。在Go语言中定义一个interface类型的方法,需要使用interface关键字。下面是interface类型的完整定义方式:type interfac......
  • go-使用通道模拟抢到活动
    packagemainimport( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" "math/rand" "sync" "time")//用户结构体typeUserstruct{ Idint Namestring Telstring Addressstring}......
  • 【Django进阶】djangorestframework-jwt使用
    简介Jsonwebtoken(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资......
  • Nacos修改内存大小
    一、存在的问题部署好的nacos老是挂掉,查看内存发现,所剩内存不多,而nacos运行时内存可以达到1G多,怎么能够设置nacos的内存呢。nacos的启动文件,startup.sh中有如下参数配置  standalone:表示单机模式运行,非集群模式-Xms:设定程序启动时占用内存大小-Xmx:设定程序运行期间最大......