def self.rss_bytes
if OS::Underlying.windows?
if OS.java?
require 'java'
mem_bean = java.lang.management.ManagementFactory.getMemoryMXBean
mem_bean.heap_memory_usage.used + mem_bean.non_heap_memory_usage.used
else
wmi = nil
begin
require 'win32ole'
wmi = WIN32OLE.connect("winmgmts://")
rescue LoadError, NoMethodError => e
raise 'rss unknown for this platform ' + e.to_s
end
processes = wmi.ExecQuery("select * from win32_process where ProcessId = #{Process.pid}")
memory_used = nil
for process in processes
raise if memory_used
memory_used = process.WorkingSetSize.to_i
end
memory_used
end
elsif OS.posix?
`ps -o rss= -p #{Process.pid}`.to_i
else
raise 'unknown rss for this platform'
end
end