From 0c5f94420ad0e0ee42fc3ea773430632ce33ba88 Mon Sep 17 00:00:00 2001 From: Brannon King Date: Tue, 27 Jul 2021 09:33:10 -0400 Subject: [PATCH] [lbry] print out memory usage periodically --- lbcd.go | 2 ++ resourceLogging.go | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 resourceLogging.go diff --git a/lbcd.go b/lbcd.go index 1b2ad72d..ec6ef086 100644 --- a/lbcd.go +++ b/lbcd.go @@ -150,6 +150,8 @@ func btcdMain(serverChan chan<- *server) error { param.SetNetwork(activeNetParams.Params.Net) // prep the claimtrie params + go logMemoryUsage() + // Create server and start it. server, err := newServer(cfg.Listeners, cfg.AgentBlacklist, cfg.AgentWhitelist, db, activeNetParams.Params, interrupt) diff --git a/resourceLogging.go b/resourceLogging.go new file mode 100644 index 00000000..d6e92051 --- /dev/null +++ b/resourceLogging.go @@ -0,0 +1,74 @@ +package main + +import ( + "fmt" + + "github.com/shirou/gopsutil/v3/disk" + "github.com/shirou/gopsutil/v3/mem" + "github.com/shirou/gopsutil/v3/process" + + "os" + "path/filepath" + "time" +) + +func toGB(n uint64) float64 { + return float64(n) / 1024.0 / 1024.0 / 1024.0 +} + +func dirSize(path string) (int64, error) { + var size int64 + err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() { + size += info.Size() + } + return err + }) + return size, err +} + +func logMemoryUsage() { + last := "" + tick := time.NewTicker(40 * time.Second) + for range tick.C { + m, err := mem.VirtualMemory() + if err != nil { + btcdLog.Warnf("When reading memory size: %s", err.Error()) + continue + } + + d, err := disk.Usage(cfg.DataDir) + if err != nil { + btcdLog.Warnf("When reading disk usage: %s", err.Error()) + continue + } + + p, err := process.NewProcess(int32(os.Getpid())) + if err != nil { + btcdLog.Warnf("When reading process: %s", err.Error()) + continue + } + + m2, err := p.MemoryInfo() + if err != nil { + btcdLog.Warnf("When reading memory info: %s", err.Error()) + continue + } + + ds, err := dirSize(cfg.DataDir) + if err != nil { + btcdLog.Debugf("When reading directory: %s", err.Error()) + continue + } + + cur := fmt.Sprintf("RAM: using %.1f GB with %.1f available, DISK: using %.1f GB with %.1f available", + toGB(m2.RSS), toGB(m.Available), toGB(uint64(ds)), toGB(d.Free)) + if cur != last { + btcdLog.Infof(cur) + last = cur + } + } +}