婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Go pprof內存指標含義備忘錄及案例分析

Go pprof內存指標含義備忘錄及案例分析

熱門標簽:廣東語音外呼系統供應商 濮陽自動外呼系統代理 澳門防封電銷卡 地圖標注測試 福州鐵通自動外呼系統 智能電銷機器人營銷 賺地圖標注的錢犯法嗎 長沙ai機器人電銷 烏魯木齊人工電銷機器人系統

最近組內一些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

查看方式

// 方式一
import "runtime"

var m runtime.MemStats
runtime.ReadMemStats(m)
// 方式二
import _ "net/http/pprof"
import "net/http"
http.ListenAndServe("0.0.0.0:10001", nil)
// http://127.0.0.1:10001/debug/pprof/heap?debug=1

下面隨便找個服務來練手。

Top查看程序的 VIRT 約為2.4G, RES 約為1.7G。

使用web pprof觀察到的指標,可以對應著前文說的含義看看。

# Sys = 1842916040 ~1.7G
# HeapSys = 1711013888 ~1.6G
# HeapInuse = 1237483520 ~1.18G
# HeapAlloc = 1195472528 ~1.14G
HeapInuse - HeapAlloc = 40M
# HeapIdle = 473530368 ~451M
# HeapReleased = 61063168 ~58.2M
HeapIdle - HeapReleased = 393M

# Alloc = 1195472528 ~1.14G
# TotalAlloc = 426616278424 ~397.3G

# Lookups = 0
# Mallocs = 2907819388 ~29億對象數
# Frees = 2901808898 ~29億對象數
# HeapObjects = 6010490 ~601萬對象數

# Stack = 33390592 / 33390592 ~31.8M / 31.8M
# MSpan = 13542744 / 19906560 ~12.9M / 18.9M
# MCache = 55552 / 65536
# BuckHashSys = 2371870
# GCSys = 69398992
# OtherSys = 6768602

總結

到此這篇關于Go pprof內存指標含義備忘錄及案例分析的文章就介紹到這了,更多相關Go pprof內存指標內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • golang切片內存應用技巧詳解
  • 解決golang內存溢出的方法
  • Go語言中的內存布局詳解
  • go語言中切片與內存復制 memcpy 的實現操作

標簽:阿克蘇 調研邀請 廣西 德州 西雙版納 太原 貴陽 慶陽

巨人網絡通訊聲明:本文標題《Go pprof內存指標含義備忘錄及案例分析》,本文關鍵詞  pprof,內存,指標,含義,備忘錄,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go pprof內存指標含義備忘錄及案例分析》相關的同類信息!
  • 本頁收集關于Go pprof內存指標含義備忘錄及案例分析的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 贵州省| 沈丘县| 永登县| 利津县| 兰坪| 宾阳县| 阿克陶县| 横峰县| 鹿邑县| 和顺县| 峡江县| 宜都市| 保德县| 白朗县| 尼勒克县| 阜宁县| 南康市| 石台县| 五峰| 辉县市| 济宁市| 崇明县| 扶风县| 微博| 梧州市| 山阴县| 达拉特旗| 禹城市| 泰宁县| 离岛区| 南阳市| 浑源县| 柏乡县| 胶南市| 上犹县| 广元市| 阳原县| 灵石县| 温州市| 靖宇县| 北海市|