Project

General

Profile

Bug #15397 » test_gc.rb

lihr (辉荣 李), 12/11/2018 03:27 AM

 
require 'json'

$file = File.expand_path("../wiki_pages.json", __FILE__)
def main
puts "read content from file #{File.size($file)}[#{File.size($file).to_hmsize}]"
json = IO.read($file)
sleep 30

puts "parse json string to object"
obj = JSON.parse(json)
sleep 30

puts "set string&object to nil, and sleep 30 min to check the memory usage."
json = nil
obj = nil
end

#### Helpers >>>
class Numeric
def to_hmsize
if self > 1024 ** 3
"#{(self * 1.0 / (1024 ** 3)).round(2)} GB"
elsif self > 1024 ** 2
"#{(self * 1.0 / (1024 ** 2)).round(2)} MB"
end
end
def to_hmtime
"#{self / 60}m#{self % 60}s"
end
end

def get_total_mem
if RUBY_PLATFORM.index("linux")
`awk '/MemTotal/ {print $2}' /proc/meminfo`.strip.to_i * 1024
elsif RUBY_PLATFORM.index("darwin")
`sysctl -a | grep mem | grep hw.memsize | awk '{print $2}'`.strip.to_i
end
end
$total_mem = get_total_mem
def free_mem
if RUBY_PLATFORM.index("linux")
(`free -b | grep Mem | awk '{print $4}'`.strip.to_i)
elsif RUBY_PLATFORM.index("darwin")
$total_mem - `ps -caxm -orss= | awk '{ sum += $1 } END { print sum }'`.strip.to_i * 1024
end
end

if !File.exists?($file)
open($file, 'w') do |f|
array = []
radix = RUBY_PLATFORM.index("darwin") ? 10000 : 1500
($total_mem / radix).times.each do |i|
array << {pageid: i, title: "title of #{i}", pagename: "pagename_of_#{i}"}
end
f.puts array.to_json
end
puts "created a json file: #{File.size($file)}[#{File.size($file).to_hmsize}]"
puts "init the json file at the first launch, please run again."
exit
end

puts RUBY_DESCRIPTION
puts Time.now

require 'objspace'

Thread.new do
started = Time.now.to_i
total_mem = $total_mem.to_hmsize
puts "Memory: \e[1;32mProcess RSS\e[0m/\e[1;34mSystem Total Memory\e[0m/\e[1;31mSystem Free Memory\e[0m"
while true
sys_mem = (`ps -o rss= -p #{Process.pid}`.strip.to_i * 1024).to_hmsize
objspace_mem = ObjectSpace.memsize_of_all.to_hmsize
puts "#{(Time.now.to_i - started).to_hmtime} #{$$}\tMemory:\e[1;32m#{sys_mem}\e[0m/\e[1;34m#{total_mem}\e[0m/\e[1;31m#{free_mem.to_hmsize}\e[0m, objspace_mem:#{objspace_mem}"
sleep 3
GC.start
end
end
#### Helpers <<<<

sleep 10
main
sleep 1800
(1-1/5)