Skip to content

Instantly share code, notes, and snippets.

@jeremy
Created February 23, 2009 21:31
Show Gist options
  • Save jeremy/69187 to your computer and use it in GitHub Desktop.
Save jeremy/69187 to your computer and use it in GitHub Desktop.
# ruby-1.8.6-ree profile_requires.rb config/environment
GC.enable_stats
$file_heap_growth = []
module TrackHeapGrowth
def require(file, *args)
heap_before, objects_before, live_before = GC.allocated_size, ObjectSpace.allocated_objects, ObjectSpace.live_objects
result = nil
elapsed = Benchmark.realtime { result = super }
heap_after, objects_after, live_after = GC.allocated_size, ObjectSpace.allocated_objects, ObjectSpace.live_objects
$file_heap_growth << [file, elapsed, heap_after - heap_before, objects_after - objects_before, live_after - live_before] if result
result
end
end
require 'benchmark'
Object.instance_eval { include TrackHeapGrowth }
GC.start
memory_usage_before = GC.allocated_size
live_before = ObjectSpace.live_objects
elapsed = Benchmark.realtime { require ARGV.shift }
GC.start
live_after = ObjectSpace.live_objects
memory_usage_after = GC.allocated_size
memory_usage = (memory_usage_after - memory_usage_before) / 1024.0
$file_heap_growth.each do |file, sec, bytes, objects, live|
puts "%s: %.2f KB for %d objects (%d churned) in %.2f ms" % [file, bytes / 1024.0, live, objects, sec * 1000]
end
puts "eating %.2f KB for %d objects, loaded in %.2f ms" % [memory_usage, live_after - live_before, elapsed * 1000]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment