VictoriaMetrics/lib/memory/memory_darwin.go
2019-05-23 00:18:06 +03:00

30 lines
610 B
Go

package memory
import (
"syscall"
"unsafe"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
)
// This has been adapted from github.com/pbnjay/memory.
func sysTotalMemory() int {
s, err := sysctlUint64("hw.memsize")
if err != nil {
logger.Panicf("FATAL: cannot determine system memory: %s", err)
}
return int(s)
}
func sysctlUint64(name string) (uint64, error) {
s, err := syscall.Sysctl(name)
if err != nil {
return 0, err
}
// hack because the string conversion above drops a \0
b := []byte(s)
if len(b) < 8 {
b = append(b, 0)
}
return *(*uint64)(unsafe.Pointer(&b[0])), nil
}