-
前言:
- 包expvar爲公共變量提供了一個標準化的接口。如服務器中的操做計數器。
- 它以 JSON 格式經過 /debug/vars 接口以 HTTP 的方式公開這些公共變量。
- 設置或修改這些公共變量的操做是原子的。
- 除了程序使用的公共變量,還註冊了
- cmdline:這個變量就是啓動命令
- memstats: 這個變量裏面存放着內存的使用狀況,
-
expvar 的使用可參考: https://orangetux.nl/post/expvar_in_action/git
- 如下具體介紹memstats,存放在runtime.mstatss.go文件的 mstats struct
-
memstats:(單位爲字節)紅色爲重點
- Alloc 堆空間分配的字節數
- TotalAlloc 從服務開始運行至今分配器爲分配的堆空間總和
- Sys 進程從系統得到的內存空間,虛擬地址空間
- Lookups 被runtime監視的指針數
- Mallocs 服務 malloc的次數
- Frees 服務 回收的heap objects
- HeapAlloc 進程 堆內存分配使用的空間,一般是用戶new出來的堆對象,包含未被gc掉的
- HeapSys 進程從系統得到的堆內存,由於golang底層使用TCmalloc機制,會緩存一部分堆內存,虛擬地址空間。
- HeapIdle 回收了的堆內存
- HeapInuse 正在使用的堆內存
- HeapReleased 返回給OS的堆內存
- HeapObjects 堆內存塊申請的量
- StackInuse 正在使用的棧
- StackSys 系統分配的做爲運行棧的內存
- MSpanInuse uint64 用於測試用的結構體使用的字節數, 不受GC控制
- MSpanSys uint64 系統爲測試用的結構體分配的字節數
- MCacheInuse mcache 結構體申請的字節數(不會被視爲垃圾回收)
- MCacheSys 操做系統申請的堆空間用於mcache的字節數
- BuckHashSys 用於剖析桶散列表的堆空間
- GCSys 垃圾回收標記元信息使用的內存
- OtherSys golang系統架構佔用的額外空間
- NextGC 垃圾回收器檢視的內存大小
- LastGC 垃圾回收器最後一次執行時間
- PauseTotalNs 圾回收或者其餘信息收集致使服務暫停的次數
- PauseNs 記錄每次gc暫停的時間(納秒),最多記錄256個最新記錄。
- PauseEnd [256]uint64 一個循環隊列,記錄最近垃圾回收系統中斷的時間開始點
- NumGC 記錄gc發生的次數。
- NumForcedGC uint32 服務調用runtime.GC()強制使用垃圾回收的次數
- GCCPUFraction float64 垃圾回收佔用服務CPU工做的時間總和。若是有100個goroutine,垃圾回收的時間爲1S,那麼久佔用了100S
- EnableGC bool 是否啓用GC
- DebugGC bool 是否啓動DebugGC
- BySize [61]struct{} 內存分配器使用狀況
-
工具集成
-
有一些工具能夠很方便地集成 expvar, 提供監控和可視化能力, 例如:github
-
expvarmon(https://github.com/divan/expvarmon), 基於控制檯的輕量級監控工具
- netdata(https://github.com/firehol/netdata/wiki/Monitoring-Go-Applications), 功能全面的服務器實時監控工具, 提供 golang expvar 支持模塊
-