I carried out his survey of system memory statistics every 1 second.
See: https://github.com/eaigner/last
Reading memory statistics on Linux:
import ( "syscall" ) func ReadSysMemStats(s *MemStats) error { if s == nil { return nil } var info syscall.Sysinfo_t err := syscall.Sysinfo(&info) if err != nil { return err } s.Total = info.Totalram s.Free = info.Freeram s.Used = s.Total - s.Free return nil }
And on Darwin / OSX
import "C" import ( "fmt" "unsafe" ) func readSysMemStats(s *SysMemStats) error { if s == nil { return nil } var vm_pagesize C.vm_size_t var vm_stat C.vm_statistics_data_t var count C.mach_msg_type_number_t = C.HOST_VM_INFO_COUNT host_port := C.host_t(C.mach_host_self()) C.host_page_size(host_port, &vm_pagesize) status := C.host_statistics( host_port, C.HOST_VM_INFO, C.host_info_t(unsafe.Pointer(&vm_stat)), &count) if status != C.KERN_SUCCESS { return fmt.Errorf("could not get vm statistics: %d", status) }
source share