10 "github.com/fsouza/go-dockerclient/external/github.com/docker/go-units"
13 // ReadMemInfo retrieves memory statistics of the host system and returns a
15 func ReadMemInfo() (*MemInfo, error) {
16 file, err := os.Open("/proc/meminfo")
21 return parseMemInfo(file)
24 // parseMemInfo parses the /proc/meminfo file into
25 // a MemInfo object given a io.Reader to the file.
27 // Throws error if there are problems reading from the file
28 func parseMemInfo(reader io.Reader) (*MemInfo, error) {
30 scanner := bufio.NewScanner(reader)
32 // Expected format: ["MemTotal:", "1234", "kB"]
33 parts := strings.Fields(scanner.Text())
35 // Sanity checks: Skip malformed entries.
36 if len(parts) < 3 || parts[2] != "kB" {
41 size, err := strconv.Atoi(parts[1])
45 bytes := int64(size) * units.KiB
49 meminfo.MemTotal = bytes
51 meminfo.MemFree = bytes
53 meminfo.SwapTotal = bytes
55 meminfo.SwapFree = bytes
60 // Handle errors that may have occurred during the reading of the file.
61 if err := scanner.Err(); err != nil {