Sha256: f68c884214013e6e0a83160646ca513c6c18c8e39e7c284026fe17b05ed139fd

Contents?: true

Size: 970 Bytes

Versions: 43

Compression:

Stored size: 970 Bytes

Contents

module ScoutRails::Instruments
  module Process
    class ProcessMemory
      def run
        res=nil
        platform = RUBY_PLATFORM.downcase

        if platform =~ /linux/
          res = get_mem_from_procfile
        elsif platform =~ /darwin9/ # 10.5
          res = get_mem_from_shell("ps -o rsz")
        elsif platform =~ /darwin1[01]/ # 10.6 & 10.7
          res = get_mem_from_shell("ps -o rss")
        end
        return res
      end

      private

      def get_mem_from_procfile
        res = nil
        proc_status = File.open(procfile, "r") { |f| f.read_nonblock(4096).strip }
        if proc_status =~ /RSS:\s*(\d+) kB/i
          res= $1.to_f / 1024.0
        end
        res
      end

      def procfile
        "/proc/#{$$}/status"
      end

      # memory in MB the current process is using
      def get_mem_from_shell(command)
        res = `#{command} #{$$}`.split("\n")[1].to_f / 1024.0 #rescue nil
        res
      end
    end
  end
end

Version data entries

43 entries across 43 versions & 2 rubygems

Version Path
scout_rails-0.0.3.pre lib/scout_rails/instruments/process/process_memory.rb
scout_rails-0.0.2 lib/scout_rails/instruments/process/process_memory.rb
scout_rails-0.0.1 lib/scout_rails/instruments/process/process_memory.rb