def system_ram_usage
@total_system_ram ||= begin
case ruby_platform
when /linux/
free_text = `free -k`
free_text =~ %r{Mem:(.+)$}
line = $1.strip
total = line.split(/ +/).first.to_i
free_text =~ %r{buffers/cache:(.+)$}
line = $1.strip
used = line.split(/ +/).first.to_i
[total, used]
when /darwin/
vm_stat = `vm_stat`
vm_stat =~ /page size of (\d+) bytes/
page_size = $1
vm_stat =~ /Pages free: +(\d+)/
free = $1
vm_stat =~ /Pages active: +(\d+)/
active = $1
vm_stat =~ /Pages inactive: +(\d+)/
inactive = $1
vm_stat =~ /Pages wired down: +(\d+)/
wired = $1
if page_size && free && active && inactive && wired
page_size = page_size.to_i
free = free.to_i * page_size / 1024
active = active.to_i * page_size / 1024
inactive = inactive.to_i * page_size / 1024
wired = wired.to_i * page_size / 1024
used = active + wired
[free + inactive + used, used]
else
nil
end
else
`top` =~ /(\d+)(K|M) Active, (\d+)(K|M) Inact, (\d+)(K|M) Wired,.*?(\d+)(K|M) Free/
if $1 && $2 && $3 && $4 && $5 && $6 && $7 && $8
to_kb = lambda do |number, unit|
if unit == 'K'
number.to_i
else
number.to_i * 1024
end
end
active = to_kb.call($1, $2)
inactive = to_kb.call($3, $4)
wired = to_kb.call($5, $6)
free = to_kb.call($7, $8)
used = active + wired
[free + inactive + used, used]
else
nil
end
end
end
end