class Process::Metrics::Memory

Constants

MAP

Public Class Methods

capture(pids) click to toggle source
# File lib/process/metrics/memory.rb, line 57
def self.capture(pids)
        usage = self.new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
        
        pids.each do |pid|
                if lines = File.readlines("/proc/#{pid}/smaps")
                        lines.each do |line|
                                # The format of this is fixed according to:
                                # https://github.com/torvalds/linux/blob/351c8a09b00b5c51c8f58b016fffe51f87e2d820/fs/proc/task_mmu.c#L804-L814
                                if /(?<name>.*?):\s+(?<value>\d+) kB/ =~ line
                                        if key = MAP[name]
                                                usage[key] += value.to_i
                                        end
                                elsif /VmFlags:\s+(?<flags>.*)/ =~ line
                                        # It should be possible to extract the number of fibers and each fiber's memory usage.
                                        # flags = flags.split(/\s+/)
                                        usage.map_count += 1
                                end
                        end
                end
        end
        
        return usage
end
supported?() click to toggle source
# File lib/process/metrics/memory.rb, line 39
def self.supported?
        true
end

Public Instance Methods

to_json(*arguments) click to toggle source
# File lib/process/metrics/memory.rb, line 29
def to_json(*arguments)
        as_json.to_json(*arguments)
end
unique_size() click to toggle source

The unique set size, the size of completely private (unshared) data.

# File lib/process/metrics/memory.rb, line 34
def unique_size
        self.private_clean_size + self.private_dirty_size
end