From fc941fa88b5eb88a2980c68b1c4f78680031ad0d Mon Sep 17 00:00:00 2001 From: Florian Staudacher Date: Thu, 5 Apr 2012 22:21:30 +0200 Subject: [PATCH 1/2] try monitoring used memory an GC by that --- spec/support/deferred_garbage_collection.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spec/support/deferred_garbage_collection.rb b/spec/support/deferred_garbage_collection.rb index 2cca9142a..7819e558a 100644 --- a/spec/support/deferred_garbage_collection.rb +++ b/spec/support/deferred_garbage_collection.rb @@ -11,7 +11,12 @@ class DeferredGarbageCollection end def self.reconsider - if DEFERRED_GC_THRESHOLD > 0 && Time.now - @@last_gc_run >= DEFERRED_GC_THRESHOLD + mem = %x(free).split(" ") + percent_used = mem[8].to_i / (mem[7].to_i/100) + + puts "percent memory used #{percent_used}" # just for info, as soon as we got some numbers remove it + + if( (DEFERRED_GC_THRESHOLD > 0 && Time.now - @@last_gc_run >= DEFERRED_GC_THRESHOLD) || percent_used > 90 ) GC.enable GC.start GC.disable From e1d86bddcf9e0f5fbe3014a37edd775442e22012 Mon Sep 17 00:00:00 2001 From: Maxwell Salzberg Date: Thu, 5 Apr 2012 14:29:41 -0700 Subject: [PATCH 2/2] some tweaks so it fails gracefully on systems that do not have free command --- features/support/env.rb | 4 ++-- spec/spec_helper.rb | 4 ++-- spec/support/deferred_garbage_collection.rb | 25 ++++++++++++++++----- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/features/support/env.rb b/features/support/env.rb index 790a9d194..2842b175e 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -104,8 +104,8 @@ end # https://makandracards.com/makandra/950-speed-up-rspec-by-deferring-garbage-collection require File.join(File.dirname(__FILE__), "..", "..", "spec", "support", "deferred_garbage_collection") Before do - DeferredGarbageCollection.start unless ENV['TRAVIS'] + DeferredGarbageCollection.start end After do - DeferredGarbageCollection.reconsider unless ENV['TRAVIS'] + DeferredGarbageCollection.reconsider end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index f8badfa43..f373e9b36 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -105,9 +105,9 @@ end # https://makandracards.com/makandra/950-speed-up-rspec-by-deferring-garbage-collection RSpec.configure do |config| config.before(:all) do - DeferredGarbageCollection.start unless ENV['TRAVIS'] + DeferredGarbageCollection.start end config.after(:all) do - DeferredGarbageCollection.reconsider unless ENV['TRAVIS'] + DeferredGarbageCollection.reconsider end end diff --git a/spec/support/deferred_garbage_collection.rb b/spec/support/deferred_garbage_collection.rb index 7819e558a..4461c9397 100644 --- a/spec/support/deferred_garbage_collection.rb +++ b/spec/support/deferred_garbage_collection.rb @@ -7,16 +7,27 @@ class DeferredGarbageCollection @@last_gc_run = Time.now def self.start + return if unsupported_enviroment GC.disable if DEFERRED_GC_THRESHOLD > 0 end + def self.memory_threshold + mem = %x(free 2>/dev/null).to_s.split(" ") + return nil if mem.empty? + mem[8].to_i / (mem[7].to_i/100) + end + def self.reconsider - mem = %x(free).split(" ") - percent_used = mem[8].to_i / (mem[7].to_i/100) + return if unsupported_enviroment - puts "percent memory used #{percent_used}" # just for info, as soon as we got some numbers remove it - - if( (DEFERRED_GC_THRESHOLD > 0 && Time.now - @@last_gc_run >= DEFERRED_GC_THRESHOLD) || percent_used > 90 ) + if (percent_used = self.memory_threshold) + running_out_of_memory = percent_used > 90 + puts "percent memory used #{percent_used}" # just for info, as soon as we got some numbers remove it + else + running_out_of_memory = false + end + + if( (DEFERRED_GC_THRESHOLD > 0 && Time.now - @@last_gc_run >= DEFERRED_GC_THRESHOLD) || running_out_of_memory ) GC.enable GC.start GC.disable @@ -24,4 +35,8 @@ class DeferredGarbageCollection end end + def self.unsupported_enviroment + # ENV['TRAVIS'] + end + end