Sha256: 89464f5ff6eded60e0496e2479a2814558d73cba23d630307ad8c943923e8845

Contents?: true

Size: 1.25 KB

Versions: 22

Compression:

Stored size: 1.25 KB

Contents

require 'open3'
module Kuroko2
  module MemorySampler
    extend self

    # @param [Integer] pgid process group id
    # @return [Integer] sum of memory consumptions of given process group
    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

    # Note:
    #   taiki-ono@ci-slave-ruby-001:~$ ps -o pgid= -o rss=
    #   22848   888
    #   25848  4056
    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

    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

    def calculate_sum(rss_lines)
      rss_lines.reject(&:blank?).map {|s| s.scan(/\d+/).first }.map(&:to_i).reduce(&:+)
    end

    def platform
      RUBY_PLATFORM.downcase
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
kuroko2-0.8.0 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.7.0 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.6.0 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.5.2 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.5.1 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.5.0 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.4.6 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.4.5 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.4.4 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.4.3 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.4.2 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.4.1 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.4.0 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.3.4 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.3.3 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.3.2 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.3.1 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.3.0 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.2.3 lib/autoload/kuroko2/memory_sampler.rb
kuroko2-0.2.2 lib/autoload/kuroko2/memory_sampler.rb