in patches/gopsutil/v3/docker/docker_linux.go [173:267]
func CgroupMemWithContext(ctx context.Context, containerID string, base string) (*CgroupMemStat, error) {
statfile := getCgroupFilePath(containerID, base, "memory", "memory.stat")
// empty containerID means all cgroup
if len(containerID) == 0 {
containerID = "all"
}
lines, err := common.ReadLines(statfile)
if err != nil {
return nil, err
}
ret := &CgroupMemStat{ContainerID: containerID}
for _, line := range lines {
fields := strings.Split(line, " ")
v, err := strconv.ParseUint(fields[1], 10, 64)
if err != nil {
continue
}
switch fields[0] {
case "cache":
ret.Cache = v
case "rss":
ret.RSS = v
case "rssHuge":
ret.RSSHuge = v
case "mappedFile":
ret.MappedFile = v
case "pgpgin":
ret.Pgpgin = v
case "pgpgout":
ret.Pgpgout = v
case "pgfault":
ret.Pgfault = v
case "pgmajfault":
ret.Pgmajfault = v
case "inactiveAnon", "inactive_anon":
ret.InactiveAnon = v
case "activeAnon", "active_anon":
ret.ActiveAnon = v
case "inactiveFile", "inactive_file":
ret.InactiveFile = v
case "activeFile", "active_file":
ret.ActiveFile = v
case "unevictable":
ret.Unevictable = v
case "hierarchicalMemoryLimit", "hierarchical_memory_limit":
ret.HierarchicalMemoryLimit = v
case "totalCache", "total_cache":
ret.TotalCache = v
case "totalRss", "total_rss":
ret.TotalRSS = v
case "totalRssHuge", "total_rss_huge":
ret.TotalRSSHuge = v
case "totalMappedFile", "total_mapped_file":
ret.TotalMappedFile = v
case "totalPgpgin", "total_pgpgin":
ret.TotalPgpgIn = v
case "totalPgpgout", "total_pgpgout":
ret.TotalPgpgOut = v
case "totalPgfault", "total_pgfault":
ret.TotalPgFault = v
case "totalPgmajfault", "total_pgmajfault":
ret.TotalPgMajFault = v
case "totalInactiveAnon", "total_inactive_anon":
ret.TotalInactiveAnon = v
case "totalActiveAnon", "total_active_anon":
ret.TotalActiveAnon = v
case "totalInactiveFile", "total_inactive_file":
ret.TotalInactiveFile = v
case "totalActiveFile", "total_active_file":
ret.TotalActiveFile = v
case "totalUnevictable", "total_unevictable":
ret.TotalUnevictable = v
}
}
r, err := getCgroupMemFile(containerID, base, "memory.usage_in_bytes")
if err == nil {
ret.MemUsageInBytes = r
}
r, err = getCgroupMemFile(containerID, base, "memory.max_usage_in_bytes")
if err == nil {
ret.MemMaxUsageInBytes = r
}
r, err = getCgroupMemFile(containerID, base, "memory.limit_in_bytes")
if err == nil {
ret.MemLimitInBytes = r
}
r, err = getCgroupMemFile(containerID, base, "memory.failcnt")
if err == nil {
ret.MemFailCnt = r
}
return ret, nil
}