Add memory stats about self

This commit is contained in:
Ingo Oppermann
2024-10-14 15:11:25 +02:00
parent 7a58c52a17
commit fbea34a43a

View File

@@ -8,21 +8,35 @@ import (
)
type selfCollector struct {
allocDescr *metric.Description
recycleDescr *metric.Description
dumpDescr *metric.Description
defaultSizeDescr *metric.Description
maxSizeDescr *metric.Description
bufferAllocDescr *metric.Description
bufferRecycleDescr *metric.Description
bufferDumpDescr *metric.Description
bufferDefaultSizeDescr *metric.Description
bufferMaxSizeDescr *metric.Description
heapAllocDescr *metric.Description
totalAllocDescr *metric.Description
heapSysDescr *metric.Description
heapIdleDescr *metric.Description
heapInuseDescr *metric.Description
heapObjectsDescr *metric.Description
}
func NewSelfCollector() metric.Collector {
c := &selfCollector{}
c.allocDescr = metric.NewDesc("bufferpool_alloc", "Number of buffer allocations", nil)
c.recycleDescr = metric.NewDesc("bufferpool_recycle", "Number of buffer recycles", nil)
c.dumpDescr = metric.NewDesc("bufferpool_dump", "Number of buffer dumps", nil)
c.defaultSizeDescr = metric.NewDesc("bufferpool_default_size", "Default buffer size", nil)
c.maxSizeDescr = metric.NewDesc("bufferpool_max_size", "Max. buffer size for recycling", nil)
c.bufferAllocDescr = metric.NewDesc("self_bufferpool_alloc", "Number of buffer allocations", nil)
c.bufferRecycleDescr = metric.NewDesc("self_bufferpool_recycle", "Number of buffer recycles", nil)
c.bufferDumpDescr = metric.NewDesc("self_bufferpool_dump", "Number of buffer dumps", nil)
c.bufferDefaultSizeDescr = metric.NewDesc("self_bufferpool_default_size", "Default buffer size", nil)
c.bufferMaxSizeDescr = metric.NewDesc("self_bufferpool_max_size", "Max. buffer size for recycling", nil)
c.heapAllocDescr = metric.NewDesc("self_mem_heap_alloc_bytes", "Number of bytes allocated on the heap", nil)
c.totalAllocDescr = metric.NewDesc("self_mem_total_alloc_bytes", "Number of bytes allocated since start", nil)
c.heapSysDescr = metric.NewDesc("self_mem_heap_sys_bytes", "Number of bytes obtained from OS", nil)
c.heapIdleDescr = metric.NewDesc("self_mem_heap_idle_bytes", "Number of unused bytes", nil)
c.heapInuseDescr = metric.NewDesc("self_mem_heap_inuse_bytes", "Number of used bytes", nil)
c.heapObjectsDescr = metric.NewDesc("self_mem_heap_objects", "Number of objects in heap", nil)
return c
}
@@ -35,29 +49,40 @@ func (c *selfCollector) Prefix() string {
func (c *selfCollector) Describe() []*metric.Description {
return []*metric.Description{
c.allocDescr,
c.recycleDescr,
c.dumpDescr,
c.defaultSizeDescr,
c.maxSizeDescr,
c.bufferAllocDescr,
c.bufferRecycleDescr,
c.bufferDumpDescr,
c.bufferDefaultSizeDescr,
c.bufferMaxSizeDescr,
c.heapAllocDescr,
c.totalAllocDescr,
c.heapSysDescr,
c.heapIdleDescr,
c.heapInuseDescr,
c.heapObjectsDescr,
}
}
func (c *selfCollector) Collect() metric.Metrics {
stats := mem.Stats()
bufferstats := mem.Stats()
metrics := metric.NewMetrics()
metrics.Add(metric.NewValue(c.allocDescr, float64(stats.Alloc)))
metrics.Add(metric.NewValue(c.recycleDescr, float64(stats.Recycle)))
metrics.Add(metric.NewValue(c.dumpDescr, float64(stats.Dump)))
metrics.Add(metric.NewValue(c.defaultSizeDescr, float64(stats.DefaultSize)))
metrics.Add(metric.NewValue(c.maxSizeDescr, float64(stats.MaxSize)))
metrics.Add(metric.NewValue(c.bufferAllocDescr, float64(bufferstats.Alloc)))
metrics.Add(metric.NewValue(c.bufferRecycleDescr, float64(bufferstats.Recycle)))
metrics.Add(metric.NewValue(c.bufferDumpDescr, float64(bufferstats.Dump)))
metrics.Add(metric.NewValue(c.bufferDefaultSizeDescr, float64(bufferstats.DefaultSize)))
metrics.Add(metric.NewValue(c.bufferMaxSizeDescr, float64(bufferstats.MaxSize)))
memstats := runtime.MemStats{}
runtime.ReadMemStats(&memstats)
//metrics.Add(metric.NewValue())
metrics.Add(metric.NewValue(c.heapAllocDescr, float64(memstats.HeapAlloc)))
metrics.Add(metric.NewValue(c.totalAllocDescr, float64(memstats.TotalAlloc)))
metrics.Add(metric.NewValue(c.heapSysDescr, float64(memstats.HeapSys)))
metrics.Add(metric.NewValue(c.heapIdleDescr, float64(memstats.HeapIdle)))
metrics.Add(metric.NewValue(c.heapInuseDescr, float64(memstats.HeapInuse)))
metrics.Add(metric.NewValue(c.heapObjectsDescr, float64(memstats.Mallocs-memstats.Frees)))
return metrics
}