module Kuroko2::MemorySampler

Public Instance Methods

get_by_pgid(pgid) click to toggle source

@param [Integer] pgid process group id @return [Integer] sum of memory consumptions of given process group

# File lib/autoload/kuroko2/memory_sampler.rb, line 8
def get_by_pgid(pgid)
  case platform
  when /linux/
    get_by_pgid_linux(pgid)
  when /darwin/
    get_by_pgid_osx(pgid)
  else
    raise "Unknown platform: #{platform}"
  end
rescue SystemCallError
  nil
end

Private Instance Methods

calculate_sum(rss_lines) click to toggle source
# File lib/autoload/kuroko2/memory_sampler.rb, line 42
def calculate_sum(rss_lines)
  rss_lines.reject(&:blank?).map {|s| s.scan(/\d+/).first }.map(&:to_i).reduce(&:+)
end
get_by_pgid_linux(pgid) click to toggle source

Note:

taiki-ono@ci-slave-ruby-001:~$ ps -o pgid= -o rss=
22848   888
25848  4056
# File lib/autoload/kuroko2/memory_sampler.rb, line 27
def get_by_pgid_linux(pgid)
  output, _, status = Open3.capture3('ps', '-o', 'pgid=', '-o', 'rss=')
  if status.success?
    targets = output.split("\n").select {|line| line.split(' ').first == pgid.to_s }
    calculate_sum(targets.map {|line| line.split(' ')[1] })
  else
    nil
  end
end
get_by_pgid_osx(pgid) click to toggle source
# File lib/autoload/kuroko2/memory_sampler.rb, line 37
def get_by_pgid_osx(pgid)
  output, _, status = Open3.capture3('ps', '-o' 'rss=', '-g', pgid.to_s)
  status.success? ? calculate_sum(output.split("\n")) : nil
end
platform() click to toggle source
# File lib/autoload/kuroko2/memory_sampler.rb, line 46
def platform
  RUBY_PLATFORM.downcase
end