How do you find the physical memory free on the machine in Ruby?

If you are using linux,You usually use a "free" command to find physical memory ie RAM details on the system

 output = %x(free)

output will look slightly like the following string

" total used free shared buffers cached\nMem: 251308 201500 49808 0 3456 48508\n-/+ buffers/cache: 149536 101772\nSwap: 524284 88612 435672\n"

You can extract the information you need using simple string manipulations like

output.split(" ")[7] will give total memory output.split(" ")[8] will give used memory output.split(" ")[9] will give free memory


Slightly slicker version of AndrewKS's answer:

total_memory_usage_in_k = `ps -Ao rss=`.split.map(&:to_i).inject(&:+)

Well, the Unix command "top" doesn't seem to work in Ruby, so try this:

# In Kilobytes
memory_usages = `ps -A -o rss=`.split("\n")
total_mem_usage = memory_usages.inject { |a, e| a.to_i + e.strip.to_i }

This "seems" correct. I don't guarantee it. Also, this takes a lot more time than the system will so by the time it's finished the physical memory would have changed.

Tags:

Ruby

Memory