get_process_mem-1.0.0/0000755000004100000410000000000014667164147014733 5ustar www-datawww-dataget_process_mem-1.0.0/.gitignore0000644000004100000410000000002314667164147016716 0ustar www-datawww-data*.gem Gemfile.lock get_process_mem-1.0.0/get_process_mem.gemspec0000644000004100000410000000174514667164147021462 0ustar www-datawww-datalib = File.expand_path("../lib", __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require "get_process_mem/version" Gem::Specification.new do |gem| gem.name = "get_process_mem" gem.version = GetProcessMem::VERSION gem.authors = ["Richard Schneeman"] gem.email = ["richard.schneeman+rubygems@gmail.com"] gem.description = " Get memory usage of a process in Ruby " gem.summary = " Use GetProcessMem to find out the amount of RAM used by any process " gem.homepage = "https://github.com/schneems/get_process_mem" gem.license = "MIT" gem.files = `git ls-files`.split($/) gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) } gem.require_paths = ["lib"] gem.required_ruby_version = ">= 2.6" gem.add_dependency "ffi", "~> 1.0" gem.add_dependency "bigdecimal", ">= 2.0" gem.add_development_dependency "sys-proctable", "~> 1.2" gem.add_development_dependency "rake", "~> 12" gem.add_development_dependency "test-unit", "~> 3" end get_process_mem-1.0.0/.standard.yml0000644000004100000410000000002214667164147017326 0ustar www-datawww-dataruby_version: 2.6 get_process_mem-1.0.0/.github/0000755000004100000410000000000014667164147016273 5ustar www-datawww-dataget_process_mem-1.0.0/.github/workflows/0000755000004100000410000000000014667164147020330 5ustar www-datawww-dataget_process_mem-1.0.0/.github/workflows/check_changelog.yml0000644000004100000410000000057114667164147024142 0ustar www-datawww-dataname: Check Changelog on: [pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Check that CHANGELOG is touched run: | cat $GITHUB_EVENT_PATH | jq .pull_request.title | grep -i '\[\(\(changelog skip\)\|\(ci skip\)\)\]' || git diff remotes/origin/${{ github.base_ref }} --name-only | grep CHANGELOG.md get_process_mem-1.0.0/.github/workflows/ci.yml0000644000004100000410000000121414667164147021444 0ustar www-datawww-dataname: CI on: - push - pull_request jobs: test: runs-on: ubuntu-latest strategy: fail-fast: false matrix: ruby: - 2.6 - 2.7 - 3.0 - 3.1 - 3.2 - 3.3 - head steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} bundler-cache: true - name: Ruby linting run: bundle exec standardrb - name: test run: bundle exec rake test continue-on-error: ${{ matrix.ruby == 'head' }} get_process_mem-1.0.0/lib/0000755000004100000410000000000014667164147015501 5ustar www-datawww-dataget_process_mem-1.0.0/lib/get_process_mem/0000755000004100000410000000000014667164147020654 5ustar www-datawww-dataget_process_mem-1.0.0/lib/get_process_mem/version.rb0000644000004100000410000000005414667164147022665 0ustar www-datawww-dataclass GetProcessMem VERSION = "1.0.0" end get_process_mem-1.0.0/lib/get_process_mem/darwin.rb0000644000004100000410000000270214667164147022466 0ustar www-datawww-datarequire "ffi" class GetProcessMem class Darwin extend FFI::Library ffi_lib "proc" class TaskInfo < FFI::Struct layout :pti_virtual_size, :uint64, :pti_resident_size, :uint64, :pti_total_user, :uint64, :pti_total_system, :uint64, :pti_threads_user, :uint64, :pti_threads_system, :uint64, :pti_policy, :int32, :pti_faults, :int32, :pti_pageins, :int32, :pti_cow_faults, :int32, :pti_messages_sent, :int32, :pti_messages_received, :int32, :pti_syscalls_mach, :int32, :pti_syscalls_unix, :int32, :pti_csw, :int32, :pti_threadnum, :int32, :pti_numrunning, :int32, :pti_priority, :int32 end attach_function :proc_pidinfo, [ :int, # pid :int, # flavour :uint64, # arg, not needed for this selector TaskInfo.by_ref, # output buffer :int # size of buffer ], :int PROC_PIDTASKINFO = 4 # from sys/proc_info.h class << self def resident_size(pid) get_proc_pidinfo(pid)[:pti_resident_size] end private def get_proc_pidinfo(pid) data = TaskInfo.new result = proc_pidinfo(pid, PROC_PIDTASKINFO, 0, data, TaskInfo.size) if result == TaskInfo.size data else raise SystemCallError.new("proc_pidinfo returned #{result}", FFI.errno) end end end end end get_process_mem-1.0.0/lib/get_process_mem.rb0000644000004100000410000000640114667164147021202 0ustar www-datawww-datarequire "pathname" require "bigdecimal" # Cribbed from Unicorn Worker Killer, thanks! class GetProcessMem private_class_method def self.number_to_bigdecimal(value) BigDecimal(value) end private def number_to_bigdecimal(value) self.class.send(:number_to_bigdecimal, value) end KB_TO_BYTE = number_to_bigdecimal 1024 # 2**10 = 1024 MB_TO_BYTE = number_to_bigdecimal 1_048_576 # 1024**2 = 1_048_576 GB_TO_BYTE = number_to_bigdecimal 1_073_741_824 # 1024**3 = 1_073_741_824 CONVERSION = {"kb" => KB_TO_BYTE, "mb" => MB_TO_BYTE, "gb" => GB_TO_BYTE} ROUND_UP = number_to_bigdecimal "0.5" attr_reader :pid RUNS_ON_WINDOWS = Gem.win_platform? if RUNS_ON_WINDOWS begin require "sys/proctable" rescue LoadError => e message = "Please add `sys-proctable` to your Gemfile for windows machines\n" message << e.message raise e, message end include Sys end RUNS_ON_DARWIN = Gem.platforms.detect do |p| p.is_a?(Gem::Platform) && p.os == "darwin" end if RUNS_ON_DARWIN begin require "get_process_mem/darwin" rescue LoadError => e message = "Please add `ffi` to your Gemfile for darwin (macos) machines\n" message << e.message raise e, message end end def initialize(pid = Process.pid) @status_file = Pathname.new "/proc/#{pid}/status" @process_file = Pathname.new "/proc/#{pid}/smaps" @pid = Integer(pid) @linux = @status_file.exist? end def linux? @linux end def bytes memory = linux_status_memory if linux? memory ||= darwin_memory if RUNS_ON_DARWIN memory ||= ps_memory memory end def kb(b = bytes) (b / KB_TO_BYTE).to_f end def mb(b = bytes) (b / MB_TO_BYTE).to_f end def gb(b = bytes) (b / GB_TO_BYTE).to_f end def inspect b = bytes "#<#{self.class}:0x%08x @mb=#{mb b} @gb=#{gb b} @kb=#{kb b} @bytes=#{b}>" % (object_id * 2) end # linux stores memory info in a file "/proc/#{pid}/status" # If it's available it uses less resources than shelling out to ps def linux_status_memory(file = @status_file) line = file.each_line.detect { |line| line.start_with? "VmRSS".freeze } return unless line return unless (_name, value, unit = line.split(nil)).length == 3 CONVERSION[unit.downcase!] * value.to_i rescue Errno::EACCES, Errno::ENOENT 0 end # linux stores detailed memory info in a file "/proc/#{pid}/smaps" def linux_memory(file = @process_file) lines = file.each_line.select { |line| line.match(/^Rss/) } return if lines.empty? lines.reduce(0) do |sum, line| line.match(/(?\d*\.{0,1}\d+)\s+(?\w\w)/) do |m| value = number_to_bigdecimal(m[:value]) + ROUND_UP unit = m[:unit].downcase sum += CONVERSION[unit] * value end sum end rescue Errno::EACCES 0 end # Pull memory from `ps` command, takes more resources and can freeze # in low memory situations def ps_memory if RUNS_ON_WINDOWS size = ProcTable.ps(pid: pid).working_set_size number_to_bigdecimal(size) else mem = `ps -o rss= -p #{pid}` KB_TO_BYTE * number_to_bigdecimal((mem == "") ? 0 : mem) end end def darwin_memory Darwin.resident_size(pid) rescue Errno::EPERM nil end end get_process_mem-1.0.0/test/0000755000004100000410000000000014667164147015712 5ustar www-datawww-dataget_process_mem-1.0.0/test/test_helper.rb0000644000004100000410000000031214667164147020551 0ustar www-datawww-dataBundler.require require "get_process_mem" require "test/unit" def fixture_path(name = nil) path = Pathname.new(File.expand_path("../fixtures", __FILE__)) return path.join(name) if name path end get_process_mem-1.0.0/test/fixtures/0000755000004100000410000000000014667164147017563 5ustar www-datawww-dataget_process_mem-1.0.0/test/fixtures/heroku-bash-smap0000644000004100000410000007051414667164147022663 0ustar www-datawww-data00400000-004db000 r-xp 00000000 07:01 72877 /bin/bash Size: 876 kB Rss: 532 kB Pss: 532 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 532 kB Private_Dirty: 0 kB Referenced: 532 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me dw 006da000-006db000 r--p 000da000 07:01 72877 /bin/bash Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me dw ac 006db000-006e4000 rw-p 000db000 07:01 72877 /bin/bash Size: 36 kB Rss: 36 kB Pss: 36 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 36 kB Referenced: 36 kB Anonymous: 36 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me dw ac 006e4000-006ea000 rw-p 00000000 00:00 0 Size: 24 kB Rss: 24 kB Pss: 24 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 24 kB Referenced: 24 kB Anonymous: 24 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 020c0000-0210e000 rw-p 00000000 00:00 0 [heap] Size: 312 kB Rss: 312 kB Pss: 312 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 312 kB Referenced: 312 kB Anonymous: 312 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f28ff505000-7f28ff511000 r-xp 00000000 07:01 81120 /lib/libnss_files-2.11.1.so Size: 48 kB Rss: 16 kB Pss: 0 kB Shared_Clean: 16 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 16 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me 7f28ff511000-7f28ff710000 ---p 0000c000 07:01 81120 /lib/libnss_files-2.11.1.so Size: 2044 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: mr mw me 7f28ff710000-7f28ff711000 r--p 0000b000 07:01 81120 /lib/libnss_files-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me ac 7f28ff711000-7f28ff712000 rw-p 0000c000 07:01 81120 /lib/libnss_files-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f28ff712000-7f28ff71c000 r-xp 00000000 07:01 81122 /lib/libnss_nis-2.11.1.so Size: 40 kB Rss: 20 kB Pss: 0 kB Shared_Clean: 20 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 20 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me 7f28ff71c000-7f28ff91b000 ---p 0000a000 07:01 81122 /lib/libnss_nis-2.11.1.so Size: 2044 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: mr mw me 7f28ff91b000-7f28ff91c000 r--p 00009000 07:01 81122 /lib/libnss_nis-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me ac 7f28ff91c000-7f28ff91d000 rw-p 0000a000 07:01 81122 /lib/libnss_nis-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f28ff91d000-7f28ff934000 r-xp 00000000 07:01 81117 /lib/libnsl-2.11.1.so Size: 92 kB Rss: 24 kB Pss: 0 kB Shared_Clean: 24 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 24 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me 7f28ff934000-7f28ffb33000 ---p 00017000 07:01 81117 /lib/libnsl-2.11.1.so Size: 2044 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: mr mw me 7f28ffb33000-7f28ffb34000 r--p 00016000 07:01 81117 /lib/libnsl-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me ac 7f28ffb34000-7f28ffb35000 rw-p 00017000 07:01 81117 /lib/libnsl-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f28ffb35000-7f28ffb37000 rw-p 00000000 00:00 0 Size: 8 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f28ffb37000-7f28ffb3f000 r-xp 00000000 07:01 81118 /lib/libnss_compat-2.11.1.so Size: 32 kB Rss: 24 kB Pss: 0 kB Shared_Clean: 24 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 24 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me 7f28ffb3f000-7f28ffd3e000 ---p 00008000 07:01 81118 /lib/libnss_compat-2.11.1.so Size: 2044 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: mr mw me 7f28ffd3e000-7f28ffd3f000 r--p 00007000 07:01 81118 /lib/libnss_compat-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me ac 7f28ffd3f000-7f28ffd40000 rw-p 00008000 07:01 81118 /lib/libnss_compat-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f28ffd40000-7f28ffebd000 r-xp 00000000 07:01 81088 /lib/libc-2.11.1.so Size: 1524 kB Rss: 540 kB Pss: 10 kB Shared_Clean: 532 kB Shared_Dirty: 0 kB Private_Clean: 8 kB Private_Dirty: 0 kB Referenced: 540 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me 7f28ffebd000-7f29000bc000 ---p 0017d000 07:01 81088 /lib/libc-2.11.1.so Size: 2044 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: mr mw me 7f29000bc000-7f29000c0000 r--p 0017c000 07:01 81088 /lib/libc-2.11.1.so Size: 16 kB Rss: 16 kB Pss: 16 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 16 kB Referenced: 16 kB Anonymous: 16 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me ac 7f29000c0000-7f29000c1000 rw-p 00180000 07:01 81088 /lib/libc-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f29000c1000-7f29000c6000 rw-p 00000000 00:00 0 Size: 20 kB Rss: 16 kB Pss: 16 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 16 kB Referenced: 16 kB Anonymous: 16 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f29000c6000-7f29000c8000 r-xp 00000000 07:01 81095 /lib/libdl-2.11.1.so Size: 8 kB Rss: 8 kB Pss: 0 kB Shared_Clean: 8 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 8 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me 7f29000c8000-7f29002c8000 ---p 00002000 07:01 81095 /lib/libdl-2.11.1.so Size: 2048 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: mr mw me 7f29002c8000-7f29002c9000 r--p 00002000 07:01 81095 /lib/libdl-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me ac 7f29002c9000-7f29002ca000 rw-p 00003000 07:01 81095 /lib/libdl-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f29002ca000-7f2900308000 r-xp 00000000 07:01 81113 /lib/libncurses.so.5.7 Size: 248 kB Rss: 136 kB Pss: 77 kB Shared_Clean: 68 kB Shared_Dirty: 0 kB Private_Clean: 68 kB Private_Dirty: 0 kB Referenced: 136 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me 7f2900308000-7f2900508000 ---p 0003e000 07:01 81113 /lib/libncurses.so.5.7 Size: 2048 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: mr mw me 7f2900508000-7f290050c000 r--p 0003e000 07:01 81113 /lib/libncurses.so.5.7 Size: 16 kB Rss: 16 kB Pss: 16 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 16 kB Referenced: 16 kB Anonymous: 16 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me ac 7f290050c000-7f290050d000 rw-p 00042000 07:01 81113 /lib/libncurses.so.5.7 Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f290050d000-7f290052d000 r-xp 00000000 07:01 81079 /lib/ld-2.11.1.so Size: 128 kB Rss: 112 kB Pss: 0 kB Shared_Clean: 112 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 112 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me dw 7f29005b9000-7f29005f8000 r--p 00000000 07:01 33875 /usr/lib/locale/en_US.utf8/LC_CTYPE Size: 252 kB Rss: 24 kB Pss: 8 kB Shared_Clean: 16 kB Shared_Dirty: 0 kB Private_Clean: 8 kB Private_Dirty: 0 kB Referenced: 24 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f29005f8000-7f2900716000 r--p 00000000 07:01 33874 /usr/lib/locale/en_US.utf8/LC_COLLATE Size: 1144 kB Rss: 12 kB Pss: 1 kB Shared_Clean: 12 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 12 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f2900716000-7f2900719000 rw-p 00000000 00:00 0 Size: 12 kB Rss: 12 kB Pss: 12 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 12 kB Referenced: 12 kB Anonymous: 12 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f2900719000-7f290071a000 r--p 00000000 07:01 33880 /usr/lib/locale/en_US.utf8/LC_NUMERIC Size: 4 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f290071a000-7f290071b000 r--p 00000000 07:01 33883 /usr/lib/locale/en_US.utf8/LC_TIME Size: 4 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f290071b000-7f290071c000 r--p 00000000 07:01 33878 /usr/lib/locale/en_US.utf8/LC_MONETARY Size: 4 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f290071c000-7f290071d000 r--p 00000000 07:01 48708 /usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES Size: 4 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f290071d000-7f290071e000 r--p 00000000 07:01 33881 /usr/lib/locale/en_US.utf8/LC_PAPER Size: 4 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f290071e000-7f290071f000 r--p 00000000 07:01 33879 /usr/lib/locale/en_US.utf8/LC_NAME Size: 4 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f290071f000-7f2900720000 r--p 00000000 07:01 33873 /usr/lib/locale/en_US.utf8/LC_ADDRESS Size: 4 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f2900720000-7f2900721000 r--p 00000000 07:01 33882 /usr/lib/locale/en_US.utf8/LC_TELEPHONE Size: 4 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f2900721000-7f2900722000 r--p 00000000 07:01 33877 /usr/lib/locale/en_US.utf8/LC_MEASUREMENT Size: 4 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f2900722000-7f2900729000 r--s 00000000 07:01 97395 /usr/lib/gconv/gconv-modules.cache Size: 28 kB Rss: 20 kB Pss: 0 kB Shared_Clean: 20 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 20 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr me ms 7f2900729000-7f290072a000 r--p 00000000 07:01 33876 /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION Size: 4 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me 7f290072a000-7f290072c000 rw-p 00000000 00:00 0 Size: 8 kB Rss: 8 kB Pss: 8 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 8 kB Referenced: 8 kB Anonymous: 8 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7f290072c000-7f290072d000 r--p 0001f000 07:01 81079 /lib/ld-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd mr mw me dw ac 7f290072d000-7f290072e000 rw-p 00020000 07:01 81079 /lib/ld-2.11.1.so Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me dw ac 7f290072e000-7f290072f000 rw-p 00000000 00:00 0 Size: 4 kB Rss: 4 kB Pss: 4 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 4 kB Referenced: 4 kB Anonymous: 4 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me ac 7ffff83a4000-7ffff83c5000 rw-p 00000000 00:00 0 [stack] Size: 136 kB Rss: 28 kB Pss: 28 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 28 kB Referenced: 28 kB Anonymous: 28 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd wr mr mw me gd ac 7ffff83fe000-7ffff8400000 r-xp 00000000 00:00 0 [vdso] Size: 8 kB Rss: 4 kB Pss: 0 kB Shared_Clean: 4 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 4 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me de ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] Size: 4 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd exget_process_mem-1.0.0/test/fixtures/heroku-bash-status0000644000004100000410000000143714667164147023244 0ustar www-datawww-dataName: bash State: S (sleeping) Tgid: 3 Ngid: 0 Pid: 3 PPid: 1 TracerPid: 0 Uid: 58790 58790 58790 58790 Gid: 58790 58790 58790 58790 FDSize: 256 Groups: VmPeak: 109120 kB VmSize: 109120 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 2032 kB VmRSS: 2032 kB VmData: 356 kB VmStk: 136 kB VmExe: 956 kB VmLib: 2288 kB VmPTE: 64 kB VmSwap: 0 kB Threads: 1 SigQ: 0/274188 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000010000 SigIgn: 0000000000380004 SigCgt: 000000004b817efb CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: 0000001ff598cffe Seccomp: 2 Cpus_allowed: f Cpus_allowed_list: 0-3 Mems_allowed: 00000000,00000001 Mems_allowed_list: 0 voluntary_ctxt_switches: 34 nonvoluntary_ctxt_switches: 35 get_process_mem-1.0.0/test/get_process_mem_test.rb0000644000004100000410000000333614667164147022456 0ustar www-datawww-datarequire "test_helper" class GetProcessMemTest < Test::Unit::TestCase def setup @mem = GetProcessMem.new end def test_different_pid_returns_different_memory pid = Process.spawn("tail -f Gemfile") other_mem = GetProcessMem.new(pid) assert @mem.kb > other_mem.kb ensure Process.kill("TERM", pid) if pid Process.wait(pid) if pid end def test_invalid_pid raised_exception = false GetProcessMem.new("ls") rescue ArgumentError raised_exception = true ensure assert raised_exception end def test_seems_to_work assert @mem.kb > 0 assert @mem.mb > 0 assert @mem.gb > 0 assert @mem.bytes > 0 end def test_linux_smap delta = 1 bytes = @mem.linux_memory(fixture_path("heroku-bash-smap")) assert_in_delta BigDecimal("2122240.0"), bytes, delta end def test_linux_status bytes = @mem.linux_status_memory(fixture_path("heroku-bash-status")) assert_equal bytes, 2080768 end def test_conversions bytes = 0 delta = BigDecimal("0.0000001") assert_in_delta 0.0, @mem.kb(bytes), delta assert_in_delta 0.0, @mem.mb(bytes), delta assert_in_delta 0.0, @mem.gb(bytes), delta # kb bytes = 1024 assert_in_delta 1.0, @mem.kb(bytes), delta assert_in_delta 0.0009765625, @mem.mb(bytes), delta assert_in_delta 9.5367431640625e-07, @mem.gb(bytes), delta # mb bytes = 1_048_576 assert_in_delta 1024.0, @mem.kb(bytes), delta assert_in_delta 1.0, @mem.mb(bytes), delta assert_in_delta 0.0009765625, @mem.gb(bytes), delta # gb bytes = 1_073_741_824 assert_in_delta 1048576.0, @mem.kb(bytes), delta assert_in_delta 1024.0, @mem.mb(bytes), delta assert_in_delta 1.0, @mem.gb(bytes), delta end end get_process_mem-1.0.0/Rakefile0000644000004100000410000000033414667164147016400 0ustar www-datawww-datarequire "bundler/gem_tasks" require "rake" require "rake/testtask" task default: [:test] Rake::TestTask.new(:test) do |t| t.libs << "lib" t.libs << "test" t.pattern = "test/**/*_test.rb" t.verbose = false end get_process_mem-1.0.0/Gemfile0000644000004100000410000000011314667164147016221 0ustar www-datawww-datasource "https://rubygems.org" gem "sys-proctable" gemspec gem "standard" get_process_mem-1.0.0/.travis.yml0000644000004100000410000000043214667164147017043 0ustar www-datawww-datalanguage: ruby os: - linux - osx before_install: - gem install bundler -v 1.17.3 rvm: - 2.2 - 2.6 - ruby-head - jruby-head - truffleruby matrix: allow_failures: - rvm: 2.2 if: os = osx - rvm: ruby-head - rvm: jruby-head - rvm: truffleruby get_process_mem-1.0.0/README.md0000644000004100000410000000307714667164147016221 0ustar www-datawww-data# Get Process Memory [![CI](https://github.com/zombocom/get_process_mem/actions/workflows/ci.yml/badge.svg)](https://github.com/zombocom/get_process_mem/actions/workflows/ci.yml) [![Help Contribute to Open Source](https://www.codetriage.com/zombocom/get_process_mem/badges/users.svg)](https://www.codetriage.com/zombocom/get_process_mem) Do you need to get the memory usage of a process? Great because this library does that. ## Install In your `Gemfile` add ```ruby gem 'get_process_mem' ``` then run `$ bundle install`. If you're using Windows you'll also need to have the `sys-proctable` gem. ## Use It Get the current process memory usage: ```ruby mem = GetProcessMem.new puts mem.inspect # mem.bytes # => 25460736 mem.kb # => 24864.0 mem.mb # => 24.28125 mem.gb # => 0.023712158203125 ``` Note: All numeric values returned as a float except bytes which is an integer. Get memory usage of another process: ```ruby `echo 'nothing to see here' > tmplogf` pid = Process.spawn('tail -f tmplog') mem = GetProcessMem.new(pid) puts mem.inspect # => # Process.kill('TERM', pid) Process.wait(pid) mem.inspect # => "#" `rm tmplog` ``` On Linux, for memory size we return the RSS or the [Resident Set Size](http://en.wikipedia.org/wiki/Resident_set_size), basically how much memory the program takes up in RAM at the time, including all the shared memory. ## License MIT get_process_mem-1.0.0/appveyor.yml0000644000004100000410000000042514667164147017324 0ustar www-datawww-datainstall: - set PATH=C:\Ruby22\bin;%PATH% - bundle install build: off before_test: - ruby -v - gem -v - bundle -v test_script: - bundle exec rake environment: matrix: - RUBY_VERSION: 23 - RUBY_VERSION: 22 - RUBY_VERSION: 21 - RUBY_VERSION: 200 get_process_mem-1.0.0/CHANGELOG.md0000644000004100000410000000207614667164147016551 0ustar www-datawww-data## HEAD (unreleased) ## 1.0.0 - Ensure PID is an integer (https://github.com/schneems/get_process_mem/pull/46) - Minimum Ruby version is now Ruby 2.6 - Add `bigdecimal` as a dependency. ## 0.2.7 - Native (faster) support for returning memory from different PIDs on mac (https://github.com/schneems/get_process_mem/pull/42) ## 0.2.6 - Support returning memory from different PIDs on mac (https://github.com/schneems/get_process_mem/pull/41) ## 0.2.5 - Use new sys-proctable interface (https://github.com/schneems/get_process_mem/pull/36) ## 0.2.4 - Use FFI to speed up memory lookup on Mac (darwin) by roughly 12x (#32) ## 0.2.3 - Silence BigDecimal deprecation warning under Ruby 2.5 (#26) ## 0.2.2 - Fix support for Ruby 2.4 (#23) ## 0.2.1 - ??? ## 0.2.0 - Reverting back to RSS for linux until (#7) is resolved ## 0.1.1 - Bugfix: the `ps` style of memory reporting should always use RSS, and Linux should always use PSS ## 0.1.0 - Default to using PSS for linux (#2 & #3) @ksoderstrom - Correct for bit shifting truncation (#4) @ksoderstrom ## 0.0.1 - Initial