Class: GetProcessMem
- Inherits:
-
Object
- Object
- GetProcessMem
- Defined in:
- lib/get_process_mem.rb,
lib/get_process_mem/version.rb
Overview
Cribbed from Unicorn Worker Killer, thanks!
Constant Summary collapse
- KB_TO_BYTE =
2**10 = 1024
1024
- MB_TO_BYTE =
1024**2 = 1_048_576
1_048_576
- GB_TO_BYTE =
1024**3 = 1_073_741_824
1_073_741_824
- CONVERSION =
{ "kb" => KB_TO_BYTE, "mb" => MB_TO_BYTE, "gb" => GB_TO_BYTE }
- ROUND_UP =
BigDecimal.new("0.5")
- VERSION =
"0.2.0"
Instance Attribute Summary collapse
-
#pid ⇒ Object
readonly
Returns the value of attribute pid.
Instance Method Summary collapse
- #bytes ⇒ Object
- #gb(b = bytes) ⇒ Object
-
#initialize(pid = Process.pid) ⇒ GetProcessMem
constructor
A new instance of GetProcessMem.
- #inspect ⇒ Object
- #kb(b = bytes) ⇒ Object
- #linux? ⇒ Boolean
-
#linux_memory(file = @process_file) ⇒ Object
linux stores memory info in a file “/proc/##pid/smaps” If it’s available it uses less resources than shelling out to ps.
- #mb(b = bytes) ⇒ Object
- #mem_type ⇒ Object
- #mem_type=(mem_type) ⇒ Object
Constructor Details
#initialize(pid = Process.pid) ⇒ GetProcessMem
Returns a new instance of GetProcessMem.
14 15 16 17 18 |
# File 'lib/get_process_mem.rb', line 14 def initialize(pid = Process.pid) @process_file = Pathname.new "/proc/#{pid}/smaps" @pid = pid @linux = @process_file.exist? end |
Instance Attribute Details
#pid ⇒ Object (readonly)
Returns the value of attribute pid.
12 13 14 |
# File 'lib/get_process_mem.rb', line 12 def pid @pid end |
Instance Method Details
#bytes ⇒ Object
24 25 26 27 |
# File 'lib/get_process_mem.rb', line 24 def bytes memory = linux_memory if linux? memory ||= ps_memory end |
#gb(b = bytes) ⇒ Object
37 38 39 |
# File 'lib/get_process_mem.rb', line 37 def gb(b = bytes) (b/BigDecimal.new(GB_TO_BYTE)).to_f end |
#inspect ⇒ Object
41 42 43 44 |
# File 'lib/get_process_mem.rb', line 41 def inspect b = bytes "#<#{self.class}:0x%08x @mb=#{ mb b } @gb=#{ gb b } @kb=#{ kb b } @bytes=#{b}>" % (object_id * 2) end |
#kb(b = bytes) ⇒ Object
29 30 31 |
# File 'lib/get_process_mem.rb', line 29 def kb(b = bytes) (b/BigDecimal.new(KB_TO_BYTE)).to_f end |
#linux? ⇒ Boolean
20 21 22 |
# File 'lib/get_process_mem.rb', line 20 def linux? @linux end |
#linux_memory(file = @process_file) ⇒ Object
linux stores memory info in a file “/proc/##pid/smaps” If it’s available it uses less resources than shelling out to ps
56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/get_process_mem.rb', line 56 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(/(?<value>(\d*\.{0,1}\d+))\s+(?<unit>\w\w)/) do |m| value = BigDecimal.new(m[:value]) + ROUND_UP unit = m[:unit].downcase sum += CONVERSION[unit] * value end sum end rescue Errno::EACCES 0 end |
#mb(b = bytes) ⇒ Object
33 34 35 |
# File 'lib/get_process_mem.rb', line 33 def mb(b = bytes) (b/BigDecimal.new(MB_TO_BYTE)).to_f end |
#mem_type ⇒ Object
46 47 48 |
# File 'lib/get_process_mem.rb', line 46 def mem_type @mem_type end |
#mem_type=(mem_type) ⇒ Object
50 51 52 |
# File 'lib/get_process_mem.rb', line 50 def mem_type=(mem_type) @mem_type = mem_type.downcase end |