From: Charles Oliver Nutter on 25 Apr 2010 22:21 Hiya! I just released a gem called jruby_gc_stats, which provides for JRuby most of the GC-monitoring methods users of Ruby Enterprise Edition might be using. These methods are provided without any performance impact using standard JVM monitoring capabilities, and should work on any mainstream JVM. Repo: http://github.com/headius/jruby_gc_stats Supported methods: GC.enable_status/disable_stats (stats do not incur any perf penalty on JRuby, so these methods just reset counters) GC.collections: number of garbage collections since "enable_stats" GC.time: amount of time in GC since "enable_stats" GC.growth: uncollected memory increase since last GC run GC.dump: dump information about all memory pools GC.allocation_size: increase in total heap size since "enable_stats" caller_for_all_threads: dump the caller stack for all active threads Unsupported: GC.num_allocations: no equivalent on JVM ObjectSpace.live_objects: requires doing a very costly heap dump ObjectSpace.allocated_objects: requires starting JVM in debug mode Install: gem install jruby_gc_stats Example: require 'rubygems' require 'jruby/gc_stats' require 'pp' puts "Enabling stats..." GC.enable_stats puts "allocation size: #{GC.allocation_size}" puts "Running loop..." 1_000.times { ary = [] 1_000.times {ary << 'foo' + 'bar'} } puts "collections: #{GC.collections}" puts "time: #{GC.time}ms" puts "bytes since last GC: #{GC.growth}" puts "size change: #{GC.allocation_size}" puts "Dumping..." GC.dump puts "Dumping caller for all threads..." 2.times {Thread.new {sleep}} pp caller_for_all_threads
|
Pages: 1 Prev: Networking: select() blocks for seconds (> timeout) Next: connect mysql:show tables |