pprof alloc含义解释

pprof allocs 内存分配

可获取runtime的内存指标
根据参数查询程序性能

全部参数及其含义

状态码 描述
Alloc , HeapAlloc 还在使用的对象,以及不使用还没被GC释放的对象的字节数 ,平时应该平缓,gc时可能出现锯齿
TotalAlloc |  累计的 Alloc 不会下降

Sys , HeapSys | 总共从OS申请的字节数,包含运行时的heap、stack和其他内部数据结构的总和,它是虚拟内存空间。不一定全部映射成了物理内存。
Mallocs| 累计分配的堆对象数
Frees| 累计释放的堆对象数
HeapIdle| 没被使用的span的字节数。这部分内存可以被归还给OS,并且还包含了HeapReleased。 可以被再次申请,甚至作为栈内存使用。
HeapInuse | 正在使用的对象字节数。有个细节是,如果一个span中可包含多个object,只要一个object在使用,那么算的是整个span。 HeapInuse - HeapAlloc是GC中保留,可以快速被使用的内存。
HeapReleased| 已归还给OS的内存。没被堆再次申请的内存。
HeapObjects| 存活的对象数。
PauseNs PauseEnd | 每个周期中GC的开始unix时间戳和结束unix时间戳 , 一个周期可能有0次GC,也可能有多次GC,如果是多次,只记录最后一个
NumGC| GC次数
NumForcedGC| 应用程序强制GC的次数
GCCPUFraction| GC总共占用的CPU资源。在0~1之间

需要关注的参数

Sys : golang 申请的虚拟内存,go在内存达到阈值后会申请一大块内存,所以这个值会比当前真正使用的大,而且短时间内不会释放
如果这个值比实际用的大很多,说明程序存在内存泄漏。

HeapAlloc : 使用的对象数量,出现大量尖刺就要查询是否gc频繁
HeapInuse: 字节数,可以用来做统计
PauseNs、PauseEnd: gc周期的开始和结束,越长代表对象越多,内存越大

allocs

请添加图片描述

heap profile: 16(当前对象): 56010272 (程序申请的内存,堆) [323889(曾经分配过内存的对象): 594740816(曾经分配过的内存)] @ heap/1048576

1(一个对象): 24002560(分配的内存) [1: 24002560] @ 0x6e6ad6 0x6e6a58 0x81dee6 0x948608 0x43a232 0x46a561

参考资源

gc源码:https://www.cnblogs.com/saryli/p/10116579.html
pprof 含义解释:https://pengrl.com/p/20031/
allocs  :https://developer.aliyun.com/article/573743

猜你喜欢

转载自blog.csdn.net/weixin_56766616/article/details/129955713