Sha256: 89b46b4c3659f3035dff7d51681740eb85b145f1e2fe1dce2746b98b91274127
Contents?: true
Size: 1.58 KB
Versions: 1
Compression:
Stored size: 1.58 KB
Contents
require 'objspace' module Memprof2 class << self def start ObjectSpace.trace_object_allocations_start end def stop ObjectSpace.trace_object_allocations_stop ObjectSpace.trace_object_allocations_clear end def run(&block) ObjectSpace.trace_object_allocations(&block) end def report(opts={}) ObjectSpace.trace_object_allocations_stop @rvalue_size = GC::INTERNAL_CONSTANTS[:RVALUE_SIZE] if @trace = opts[:trace] raise ArgumentError, "`trace` option must be a Regexp object" unless @trace.is_a?(Regexp) end if @ignore = opts[:ignore] raise ArgumentError, "`trace` option must be a Regexp object" unless @ignore.is_a?(Regexp) end results = {} ObjectSpace.each_object do |o| next unless (file = ObjectSpace.allocation_sourcefile(o)) next if file == __FILE__ next if (@trace and @trace !~ file) next if (@ignore and @ignore =~ file) line = ObjectSpace.allocation_sourceline(o) memsize = ObjectSpace.memsize_of(o) + @rvalue_size memsize = @rvalue_size if memsize > 100_000_000_000 # compensate for API bug klass = o.class.name rescue "BasicObject" location = "#{file}:#{line}:#{klass}" results[location] ||= 0 results[location] += memsize end @out = opts[:out] || "/dev/stdout" File.open(@out, 'w') do |io| results.each do |location, memsize| io.puts "#{memsize} #{location}" end end ensure ObjectSpace.trace_object_allocations_start end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
memprof2-0.0.1 | lib/memprof2.rb |