class Linux
Definitions
def self.total_size
Signature
-
returns
Numeric
Total memory size in kilobytes.
Implementation
def self.total_size
File.read("/proc/meminfo").each_line do |line|
if /MemTotal:\s+(?<total>\d+) kB/ =~ line
return total.to_i
end
end
end
SMAP = {...}
The fields that will be extracted from the smaps
data.
Implementation
SMAP = {
"Rss" => :resident_size,
"Pss" => :proportional_size,
"Shared_Clean" => :shared_clean_size,
"Shared_Dirty" => :shared_dirty_size,
"Private_Clean" => :private_clean_size,
"Private_Dirty" => :private_dirty_size,
"Referenced" => :referenced_size,
"Anonymous" => :anonymous_size,
"Swap" => :swap_size,
"SwapPss" => :proportional_swap_size,
}
def self.supported?
Whether the memory usage can be captured on this system.
Implementation
def self.supported?
true
end
def self.supported?
Whether the memory usage can be captured on this system.
Implementation
def self.supported?
true
end
def self.capture(pid, **options)
Capture memory usage for the given process IDs.
Implementation
def self.capture(pid, **options)
usage = Memory.zero
begin
File.foreach("/proc/#{pid}/smaps_rollup") do |line|
if /(?<name>.*?):\s+(?<value>\d+) kB/ =~ line
if key = SMAP[name]
usage[key] += value.to_i
end
end
end
usage.map_count += File.readlines("/proc/#{pid}/maps").size
rescue Errno::ENOENT => error
# Ignore.
end
return usage
end
def self.capture(pid, **options)
Capture memory usage for the given process IDs.
Implementation
def self.capture(pid, **options)
usage = Memory.zero
begin
File.foreach("/proc/#{pid}/smaps") 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 = SMAP[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
rescue Errno::ENOENT => error
# Ignore.
end
return usage
end