-
-
Save authorNari/2176775 to your computer and use it in GitHub Desktop.
test to see if GC in ruby 2 is truly copy on write friendly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
rss = '.+?Rss:\s+(\d+)' | |
share = '.+?Shared_Clean:\s+(\d+)' | |
share << '.+?Shared_Dirty:\s+(\d+)' | |
priv = '.+?Private_Clean:\s+(\d+)' | |
priv << '.+?Private_Dirty:\s+(\d+)' | |
MEM_REGEXP = /\[heap\]#{rss}#{share}#{priv}/m | |
def mem_usage() | |
if File.read("/proc/#{Process.pid}/smaps").match(MEM_REGEXP) | |
rss = $1.to_i | |
share = $2.to_i + $3.to_i | |
priv = $4.to_i + $5.to_i | |
end | |
"RSS: #{rss} kB, Shared: #{share} kB, Private: #{priv} kB" | |
end | |
puts "parent (#{Process.pid}) baseline memory: #{mem_usage}" | |
alloc=10000 * 2 ** 10 | |
puts "parent allocating #{alloc} objects" | |
a = [] | |
alloc.times do | |
a << Object.new | |
end | |
puts "parent allocated, mem usage: #{mem_usage}" | |
GC.start | |
GC.start | |
GC.start | |
puts "parent GC'd, mem usage: #{mem_usage}" | |
sleep 2 | |
if fork | |
puts "parent (#{Process.pid}) GC'd and sleeping, mem usage: #{mem_usage}" | |
sleep 40 | |
else | |
puts "child (#{Process.pid}) forked, mem usage: #{mem_usage}" | |
GC.start | |
GC.start | |
GC.start | |
puts "child (#{Process.pid}) GC'd and sleeping, mem usage: #{mem_usage}" | |
sleep 30 | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% ruby -v | |
ruby 2.0.0dev (2012-03-23 trunk 35121) [x86_64-linux] | |
exit status: 0 | |
% ruby gc-cow.rb | |
parent (16718) baseline memory: RSS: 2552 kB, Shared: 0 kB, Private: 2552 kB | |
parent allocating 10240000 objects | |
parent allocated, mem usage: RSS: 442784 kB, Shared: 0 kB, Private: 442784 kB | |
parent GC'd, mem usage: RSS: 446920 kB, Shared: 0 kB, Private: 446920 kB | |
parent (16718) GC'd and sleeping, mem usage: RSS: 446952 kB, Shared: 446908 kB, Private: 44 kB | |
child (16738) forked, mem usage: RSS: 446952 kB, Shared: 446908 kB, Private: 44 kB | |
child (16738) GC'd and sleeping, mem usage: RSS: 446976 kB, Shared: 442636 kB, Private: 4340 kB | |
--- | |
% ruby -v | |
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux] | |
% ruby gc-cow.rb | |
parent (17090) baseline memory: RSS: 2456 kB, Shared: 0 kB, Private: 2456 kB | |
parent allocating 10240000 objects | |
parent allocated, mem usage: RSS: 439196 kB, Shared: 0 kB, Private: 439196 kB | |
parent GC'd, mem usage: RSS: 439252 kB, Shared: 0 kB, Private: 439252 kB | |
child (17102) forked, mem usage: RSS: 439288 kB, Shared: 439252 kB, Private: 36 kB | |
parent (17090) GC'd and sleeping, mem usage: RSS: 439288 kB, Shared: 439252 kB, Private: 36 kB | |
child (17102) GC'd and sleeping, mem usage: RSS: 439312 kB, Shared: 1564 kB, Private: 437748 kB |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment