aboutsummaryrefslogtreecommitdiff
path: root/go/stats/memory.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/stats/memory.go')
-rw-r--r--go/stats/memory.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/go/stats/memory.go b/go/stats/memory.go
new file mode 100644
index 000000000..b899e1e4e
--- /dev/null
+++ b/go/stats/memory.go
@@ -0,0 +1,38 @@
+// +build !windows
+
+package stats
+
+import (
+ "runtime"
+ "syscall"
+)
+
+type MemStatus struct {
+ Goroutines int
+ All uint64
+ Used uint64
+ Free uint64
+ Self uint64
+ Heap uint64
+ Stack uint64
+}
+
+func MemStat() MemStatus {
+ mem := MemStatus{}
+ mem.Goroutines = runtime.NumGoroutine()
+ memStat := new(runtime.MemStats)
+ runtime.ReadMemStats(memStat)
+ mem.Self = memStat.Alloc
+ mem.Heap = memStat.HeapAlloc
+ mem.Stack = memStat.StackInuse
+
+ //system memory usage
+ sysInfo := new(syscall.Sysinfo_t)
+ err := syscall.Sysinfo(sysInfo)
+ if err == nil {
+ mem.All = sysInfo.Totalram //* uint64(syscall.Getpagesize())
+ mem.Free = sysInfo.Freeram //* uint64(syscall.Getpagesize())
+ mem.Used = mem.All - mem.Free
+ }
+ return mem
+}