class GitLab::Exporter::MemStats::Mapping

Parses one entry in /proc//smaps. For example:

00400000-00401000 r-xp 00000000 08:01 541055 /opt/gitlab/embedded/bin/ruby Size: 4 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Shared_Hugetlb: 0 kB Private_Hugetlb: 0 kB Swap: 0 kB SwapPss: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me dw sd

Constants

FIELDS

Attributes

address_end[R]
address_start[R]
device_major[R]
device_minor[R]
inode[R]
offset[R]
perms[R]
private_clean[RW]
private_dirty[RW]
pss[RW]
region[R]
rss[RW]
shared_clean[RW]
shared_dirty[RW]
size[RW]
swap[RW]

Public Class Methods

new(lines) click to toggle source
# File lib/gitlab_exporter/memstats/mapping.rb, line 48
def initialize(lines)
  FIELDS.each do |field|
    send("#{field}=", 0)
  end

  parse_first_line(lines.shift)

  lines.each do |l|
    parse_field_line(l)
  end
end

Public Instance Methods

parse_field_line(line) click to toggle source
# File lib/gitlab_exporter/memstats/mapping.rb, line 72
def parse_field_line(line)
  line.strip!

  parts = line.split

  return unless parts

  parts[0].downcase!
  parts[0].sub!(":", "")
  field = parts[0]

  return unless respond_to? "#{field}="

  value = Float(parts[1]).to_i
  send("#{field}=", value)
end
parse_first_line(line) click to toggle source
# File lib/gitlab_exporter/memstats/mapping.rb, line 60
def parse_first_line(line)
  line.strip!

  parts = line.split
  @address_start, @address_end = parts[0].split("-")
  @perms = parts[1]
  @offset = parts[2]
  @device_major, @device_minor = parts[3].split(":")
  @inode = parts[4]
  @region = parts[5] || "anonymous"
end