Created
November 17, 2016 16:29
-
-
Save jrafanie/f9f12fb2fba548bf6f32eb4276da901e to your computer and use it in GitHub Desktop.
Trace allocations in amazon provider refresh specs
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
| From 19f131f47fc27939374253a936e10a9d7cbe3a3b Mon Sep 17 00:00:00 2001 | |
| From: Joe Rafaniello <[email protected]> | |
| Date: Wed, 16 Nov 2016 14:09:45 -0500 | |
| Subject: [PATCH] WIP | |
| --- | |
| .../amazon/cloud_manager/refresher_spec.rb | 67 ++++++++++++++++++++-- | |
| 1 file changed, 63 insertions(+), 4 deletions(-) | |
| diff --git a/spec/models/manageiq/providers/amazon/cloud_manager/refresher_spec.rb b/spec/models/manageiq/providers/amazon/cloud_manager/refresher_spec.rb | |
| index 5b3e2da..3f8eb38 100644 | |
| --- a/spec/models/manageiq/providers/amazon/cloud_manager/refresher_spec.rb | |
| +++ b/spec/models/manageiq/providers/amazon/cloud_manager/refresher_spec.rb | |
| @@ -1,8 +1,63 @@ | |
| + def iter(n) | |
| + if n > 0 | |
| + 1.times{ | |
| + iter(n-1) | |
| + } | |
| + else | |
| + # null code | |
| + end | |
| + end | |
| + | |
| + def gc | |
| + iter(100) | |
| + GC.start | |
| + GC.start | |
| + end | |
| + | |
| + def start_objspace_trace | |
| + require "objspace" | |
| + ObjectSpace.trace_object_allocations_start | |
| + end | |
| + | |
| + def stop_objspace_trace | |
| + ObjectSpace.trace_object_allocations_stop | |
| + gc | |
| + gc | |
| + gc | |
| + end | |
| + | |
| + def log_retained_allocations(key = :line) | |
| + current_file = File.basename(__FILE__) | |
| + object_hash = {} | |
| + ObjectSpace.each_object do |o| | |
| + sourcefile = ObjectSpace.allocation_sourcefile(o) || "" | |
| + next if sourcefile.include?(current_file) | |
| + | |
| + obj_key = "#{o.class.name}\t" | |
| + obj_key << sourcefile if [:line, :file, :path].include?(key) | |
| + obj_key << ":#{ObjectSpace.allocation_sourceline(o)}" if key == :line | |
| + | |
| + object_hash[obj_key] ||= Hash.new { |h, _| h[:count] = 0; h[:memsize] = 0 } | |
| + object_hash[obj_key][:count] += 1 | |
| + object_hash[obj_key][:memsize] += ObjectSpace.memsize_of(o) | |
| + end | |
| + | |
| + object_hash.sort_by {|k, v| -v[:memsize]}[0..1000].each do |k, v| | |
| + puts "m: %11s | c: %7s | %s" % | |
| + [v[:memsize].to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,"), | |
| + v[:count].to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,"), | |
| + k ] | |
| + end | |
| + end | |
| + | |
| +start_objspace_trace | |
| + | |
| require_relative "../aws_refresher_spec_common" | |
| describe ManageIQ::Providers::Amazon::CloudManager::Refresher do | |
| include AwsRefresherSpecCommon | |
| + | |
| before(:each) do | |
| _guid, _server, zone = EvmSpecHelper.create_guid_miq_server_zone | |
| @ems = FactoryGirl.create(:ems_amazon, :zone => zone) | |
| @@ -14,16 +69,20 @@ describe ManageIQ::Providers::Amazon::CloudManager::Refresher do | |
| end | |
| it "will perform a full refresh" do | |
| - 2.times do # Run twice to verify that a second run with existing data does not change anything | |
| + #2.times do # Run twice to verify that a second run with existing data does not change anything | |
| @ems.reload | |
| VCR.use_cassette(described_class.name.underscore) do | |
| EmsRefresh.refresh(@ems) | |
| EmsRefresh.refresh(@ems.network_manager) | |
| end | |
| - @ems.reload | |
| - assert_common | |
| - end | |
| + @ems.reload | |
| +# @ems.send(:clear_association_cache) | |
| +stop_objspace_trace | |
| +gc | |
| +log_retained_allocations | |
| + #assert_common | |
| + #end | |
| end | |
| end | |
| -- | |
| 2.7.3 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment