72 lines
1.3 KiB
Go
72 lines
1.3 KiB
Go
package api
|
|
|
|
import (
|
|
"expvar"
|
|
"runtime"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"github.com/cortezaproject/corteza-server/pkg/logger"
|
|
)
|
|
|
|
type Monitor struct {
|
|
Alloc,
|
|
TotalAlloc,
|
|
Sys,
|
|
Mallocs,
|
|
Frees,
|
|
LiveObjects,
|
|
PauseTotalNs uint64
|
|
|
|
NumGC uint32
|
|
NumGoroutine int
|
|
}
|
|
|
|
func NewMonitor(duration int) {
|
|
var (
|
|
m = Monitor{}
|
|
rtm runtime.MemStats
|
|
goroutines = expvar.NewInt("num_goroutine")
|
|
)
|
|
var interval = time.Duration(duration) * time.Second
|
|
for {
|
|
<-time.After(interval)
|
|
|
|
// Read full mem stats
|
|
runtime.ReadMemStats(&rtm)
|
|
|
|
// Number of goroutines
|
|
m.NumGoroutine = runtime.NumGoroutine()
|
|
goroutines.Set(int64(m.NumGoroutine))
|
|
|
|
// Misc memory stats
|
|
m.Alloc = rtm.Alloc
|
|
m.TotalAlloc = rtm.TotalAlloc
|
|
m.Sys = rtm.Sys
|
|
m.Mallocs = rtm.Mallocs
|
|
m.Frees = rtm.Frees
|
|
|
|
// Live objects = Mallocs - Frees
|
|
m.LiveObjects = m.Mallocs - m.Frees
|
|
|
|
// GC Stats
|
|
m.PauseTotalNs = rtm.PauseTotalNs
|
|
m.NumGC = rtm.NumGC
|
|
|
|
logger.Default().
|
|
With(
|
|
zap.Uint64("alloc", m.Alloc),
|
|
zap.Uint64("totalAlloc", m.TotalAlloc),
|
|
zap.Uint64("sys", m.Sys),
|
|
zap.Uint64("mallocs", m.Mallocs),
|
|
zap.Uint64("frees", m.Frees),
|
|
zap.Uint64("liveObjects", m.LiveObjects),
|
|
zap.Uint64("pauseTotalNs", m.PauseTotalNs),
|
|
zap.Uint32("numGC", m.NumGC),
|
|
zap.Int("numGoRoutines", m.NumGoroutine),
|
|
).
|
|
Debug("monitor")
|
|
}
|
|
}
|