Memory::LeakSourceMemoryLeakSystem

module System

System-specific memory information.

Definitions

def self.total_memory_size

Signature

returns Integer

The total memory size in bytes.

Implementation

def self.total_memory_size
	File.foreach("/proc/meminfo") do |line|
		if /MemTotal:\s*(?<total>\d+)\s*kB/ =~ line
			return total.to_i * 1024
		end
	end
end

def self.total_memory_size

Signature

returns Integer

The total memory size in bytes.

Implementation

def self.total_memory_size
	IO.popen(["sysctl", "hw.memsize"], "r") do |io|
		io.each_line do |line|
			if /hw.memsize:\s*(?<total>\d+)/ =~ line
				return total.to_i
			end
		end
	end
end

def self.memory_usages(process_ids)

Get the memory usage of the given process IDs.

Signature

parameter process_ids Array(Integer)

The process IDs to monitor.

returns Array(Tuple(Integer, Integer))

The memory usage of the given process IDs.

Implementation

def self.memory_usages(process_ids)
	return to_enum(__method__, process_ids) unless block_given?
	
	if process_ids.any?
		IO.popen(["ps", "-o", "pid=,rss=", "-p", process_ids.join(",")]) do |io|
			io.each_line.map(&:split).each do |process_id, size|
				yield process_id.to_i, size.to_i * 1024
			end
		end
	end
end

def self.memory_usage(process_id)

Get the memory usage of the given process IDs.

Signature

parameter process_ids Array(Integer)

The process IDs to monitor.

returns Array(Tuple(Integer, Integer))

The memory usage of the given process IDs.

Implementation

def self.memory_usage(process_id)
	IO.popen(["ps", "-o", "rss=", "-p", process_id.to_s]) do |io|
		return io.read.to_i * 1024
	end
end