123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- package procfs
- import (
- "bufio"
- "bytes"
- "fmt"
- "io"
- "strconv"
- "strings"
- "github.com/prometheus/procfs/internal/util"
- )
- type Meminfo struct {
-
-
- MemTotal uint64
-
- MemFree uint64
-
-
-
-
-
-
-
-
- MemAvailable uint64
-
-
- Buffers uint64
- Cached uint64
-
-
-
-
- SwapCached uint64
-
-
- Active uint64
-
-
- Inactive uint64
- ActiveAnon uint64
- InactiveAnon uint64
- ActiveFile uint64
- InactiveFile uint64
- Unevictable uint64
- Mlocked uint64
-
- SwapTotal uint64
-
-
- SwapFree uint64
-
- Dirty uint64
-
- Writeback uint64
-
- AnonPages uint64
-
- Mapped uint64
- Shmem uint64
-
- Slab uint64
-
- SReclaimable uint64
-
- SUnreclaim uint64
- KernelStack uint64
-
-
- PageTables uint64
-
-
- NFSUnstable uint64
-
- Bounce uint64
-
- WritebackTmp uint64
-
-
-
-
-
-
-
-
-
-
-
-
-
- CommitLimit uint64
-
-
-
-
-
-
-
-
-
-
-
-
-
- CommittedAS uint64
-
- VmallocTotal uint64
-
- VmallocUsed uint64
-
- VmallocChunk uint64
- HardwareCorrupted uint64
- AnonHugePages uint64
- ShmemHugePages uint64
- ShmemPmdMapped uint64
- CmaTotal uint64
- CmaFree uint64
- HugePagesTotal uint64
- HugePagesFree uint64
- HugePagesRsvd uint64
- HugePagesSurp uint64
- Hugepagesize uint64
- DirectMap4k uint64
- DirectMap2M uint64
- DirectMap1G uint64
- }
- func (fs FS) Meminfo() (Meminfo, error) {
- b, err := util.ReadFileNoStat(fs.proc.Path("meminfo"))
- if err != nil {
- return Meminfo{}, err
- }
- m, err := parseMemInfo(bytes.NewReader(b))
- if err != nil {
- return Meminfo{}, fmt.Errorf("failed to parse meminfo: %v", err)
- }
- return *m, nil
- }
- func parseMemInfo(r io.Reader) (*Meminfo, error) {
- var m Meminfo
- s := bufio.NewScanner(r)
- for s.Scan() {
-
- fields := strings.Fields(s.Text())
- if len(fields) < 2 {
- return nil, fmt.Errorf("malformed meminfo line: %q", s.Text())
- }
- v, err := strconv.ParseUint(fields[1], 0, 64)
- if err != nil {
- return nil, err
- }
- switch fields[0] {
- case "MemTotal:":
- m.MemTotal = v
- case "MemFree:":
- m.MemFree = v
- case "MemAvailable:":
- m.MemAvailable = v
- case "Buffers:":
- m.Buffers = v
- case "Cached:":
- m.Cached = v
- case "SwapCached:":
- m.SwapCached = v
- case "Active:":
- m.Active = v
- case "Inactive:":
- m.Inactive = v
- case "Active(anon):":
- m.ActiveAnon = v
- case "Inactive(anon):":
- m.InactiveAnon = v
- case "Active(file):":
- m.ActiveFile = v
- case "Inactive(file):":
- m.InactiveFile = v
- case "Unevictable:":
- m.Unevictable = v
- case "Mlocked:":
- m.Mlocked = v
- case "SwapTotal:":
- m.SwapTotal = v
- case "SwapFree:":
- m.SwapFree = v
- case "Dirty:":
- m.Dirty = v
- case "Writeback:":
- m.Writeback = v
- case "AnonPages:":
- m.AnonPages = v
- case "Mapped:":
- m.Mapped = v
- case "Shmem:":
- m.Shmem = v
- case "Slab:":
- m.Slab = v
- case "SReclaimable:":
- m.SReclaimable = v
- case "SUnreclaim:":
- m.SUnreclaim = v
- case "KernelStack:":
- m.KernelStack = v
- case "PageTables:":
- m.PageTables = v
- case "NFS_Unstable:":
- m.NFSUnstable = v
- case "Bounce:":
- m.Bounce = v
- case "WritebackTmp:":
- m.WritebackTmp = v
- case "CommitLimit:":
- m.CommitLimit = v
- case "Committed_AS:":
- m.CommittedAS = v
- case "VmallocTotal:":
- m.VmallocTotal = v
- case "VmallocUsed:":
- m.VmallocUsed = v
- case "VmallocChunk:":
- m.VmallocChunk = v
- case "HardwareCorrupted:":
- m.HardwareCorrupted = v
- case "AnonHugePages:":
- m.AnonHugePages = v
- case "ShmemHugePages:":
- m.ShmemHugePages = v
- case "ShmemPmdMapped:":
- m.ShmemPmdMapped = v
- case "CmaTotal:":
- m.CmaTotal = v
- case "CmaFree:":
- m.CmaFree = v
- case "HugePages_Total:":
- m.HugePagesTotal = v
- case "HugePages_Free:":
- m.HugePagesFree = v
- case "HugePages_Rsvd:":
- m.HugePagesRsvd = v
- case "HugePages_Surp:":
- m.HugePagesSurp = v
- case "Hugepagesize:":
- m.Hugepagesize = v
- case "DirectMap4k:":
- m.DirectMap4k = v
- case "DirectMap2M:":
- m.DirectMap2M = v
- case "DirectMap1G:":
- m.DirectMap1G = v
- }
- }
- return &m, nil
- }
|