tunemygc 1.0.62 → 1.0.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1e42968ff1c2b8265df99371ac476794cf89b2c7
4
- data.tar.gz: 7c1e5605c1af4ca1755c8024906a4ab349264fbd
3
+ metadata.gz: 1f3cff9c60663d4fbf8c11bc5096958f142e054a
4
+ data.tar.gz: b01919539d52fe6aeee7ce2d27d39731e94d9499
5
5
  SHA512:
6
- metadata.gz: d2a01c4c691fb954ed49442a29378741f110ef7af3d5ea7ad4de5a1fa2fbfa43d3ccdf78dc8b141b88b21ddcc7c878b6652ec686c0b426a6836b0bbcbf8b0bab
7
- data.tar.gz: 1bf3f4c30f9337b147ab39c20c30c972825e44d8ee145c8053293025c3bd6b2862be5fd8677e23b7439cbe9f33a0e7d2488a7658825cbf5507257260825bdabe
6
+ metadata.gz: 00295573d71f3f0f67ca0169f260a917cf8fee2cf28e8a7f7b200f56568d9c81ded00c30a5c9ff6f8a32b9618ae7d4254da8fbd56f40abb92c734c2f745cf5c6
7
+ data.tar.gz: 1f14012d156fd467a0850391235de2e732766af61212375aca720b68f111d0a3e4102d9a53e9a3d04588d2058acbe40137931801647583950dbcf8da8f0e1850
@@ -61,6 +61,23 @@ module TuneMyGc
61
61
  reset
62
62
  end
63
63
 
64
+ def kamikaze
65
+ Thread.new do
66
+ TuneMyGc.snapshot(:TERMINATED, ObjectSpace.count_objects.merge(:memsize => ObjectSpace.memsize_of_all))
67
+ TuneMyGc.log "kamikaze: synching #{TuneMyGc.snapshotter.size} GC sample snapshots ahead of time (usually only on process exit)"
68
+ Timeout.timeout(TuneMyGC::KAMIZE_SYNC_TIMEOUT) do
69
+ begin
70
+ TuneMyGc.recommendations
71
+ reset
72
+ rescue Timeout::Error
73
+ # Discard the TERMINATED snapshot, retry in the at_exit block
74
+ TuneMyGc.snapshotter.deq
75
+ TuneMyGc.log "kamikaze: timeout syncing #{TuneMyGc.snapshotter.size} GC samples ahead of time"
76
+ end
77
+ end
78
+ end
79
+ end
80
+
64
81
  private
65
82
  def reset
66
83
  @installed = false
@@ -15,6 +15,7 @@ end
15
15
 
16
16
  module TuneMyGc
17
17
  NETWORK_TIMEOUT = 30 #seconds
18
+ KAMIZE_SYNC_TIMEOUT = 35 #seconds
18
19
 
19
20
  def self.http_client
20
21
  uri = URI("https://#{TuneMyGc::HOST}")
@@ -23,6 +23,7 @@ module TuneMyGc
23
23
  if @processed == @limit
24
24
  uninstall
25
25
  TuneMyGc.log "kamikaze after #{@processed} of #{@limit} units of work"
26
+ TuneMyGc.interposer.kamikaze
26
27
  end
27
28
  end
28
29
  end
@@ -48,7 +48,9 @@ module TuneMyGc
48
48
  payload.clear
49
49
  end
50
50
  else
51
- TuneMyGc.log "Nothing to sync, discarding #{snapshotter.size} snapshots"
51
+ TunemMyGc.log "The TuneMyGC service requires an instrumented application to do at least one unit of work (an ActionController request / response cycle, processing a background job through ActiveJob etc.) in order to suggest a configuration."
52
+ TuneMyGc.log "During the last instrumented run, the agent observed #{snapshotter.size} GC events of interest, but none of them happened within the context of a unit of work and is thus not representative of your application's GC profile."
53
+ TuneMyGc.log "Therefore, we're discarding #{snapshotter.size} snapshots and will generate a configuration when there's more context available for the agent to get a representative sample size."
52
54
  false
53
55
  end
54
56
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module TuneMyGc
4
- VERSION = "1.0.62"
4
+ VERSION = "1.0.63"
5
5
  end
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.dirname(__FILE__), 'helper')
4
+
5
+ class TestKamikaze < MiniTest::Unit::TestCase
6
+ def test_kamikaze
7
+ syncer = TuneMyGc::Syncer.new
8
+ snapshots = TuneMyGc::Snapshotter.new
9
+ snapshots.take_raw(Fixtures::STAGE_BOOTED)
10
+
11
+ stub_request(:get, "https://tunemygc.com/configs/xxxxxxx").
12
+ with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
13
+ to_return(:status => 200, :body => ActiveSupport::JSON.encode({:Memory=>{:RUBY_GC_HEAP_INIT_SLOTS=>477268, :RUBY_GC_HEAP_FREE_SLOTS=>106607, :RUBY_GC_HEAP_GROWTH_FACTOR=>1.05, :RUBY_GC_HEAP_GROWTH_MAX_SLOTS=>10661, :RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=>1.05, :RUBY_GC_MALLOC_LIMIT=>2000000, :RUBY_GC_MALLOC_LIMIT_MAX=>4000000, :RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR=>1.1, :RUBY_GC_OLDMALLOC_LIMIT=>2000000, :RUBY_GC_OLDMALLOC_LIMIT_MAX=>4000000, :RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR=>1.05}, :Speed=>{:RUBY_GC_HEAP_INIT_SLOTS=>572722, :RUBY_GC_HEAP_FREE_SLOTS=>553800, :RUBY_GC_HEAP_GROWTH_FACTOR=>1.2, :RUBY_GC_HEAP_GROWTH_MAX_SLOTS=>83070, :RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=>2.0, :RUBY_GC_MALLOC_LIMIT=>64000000, :RUBY_GC_MALLOC_LIMIT_MAX=>128000000, :RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR=>1.56, :RUBY_GC_OLDMALLOC_LIMIT=>64000000, :RUBY_GC_OLDMALLOC_LIMIT_MAX=>33554432, :RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR=>1.32}}), :headers => {})
14
+
15
+ stub_request(:post, "https://tunemygc.com/ruby").
16
+ with(:body => "[#{ActiveSupport::JSON.encode(syncer.environment(snapshots))},[1420152606.1162581,\"BOOTED\",[32,950,1519,569,385225,2014,0,101119,950,0,2184137,1798912,9665288,16777216,26,6,5145,6032,230164,301030,11715304,24159190],{\"major_by\":null,\"gc_by\":\"newobj\",\"have_finalizer\":false,\"immediate_sweep\":false},null,70201748333020]]",
17
+ :headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/json', 'User-Agent'=>"TuneMyGC #{TuneMyGc::VERSION}"}).
18
+ to_return(:status => 200, :body => "https://www.tunemygc.com/configs/xxxxxxx", :headers => {})
19
+ out, err = capture_io do
20
+ TuneMyGc.logger = Logger.new($stdout)
21
+ TuneMyGc.interposer.kamikaze
22
+ end
23
+ sleep 1
24
+ assert_match(/kamikaze\: synching \d GC sample snapshots ahead of time \(usually only on process exit\)/, out)
25
+ end
26
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tunemygc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.62
4
+ version: 1.0.63
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bear Metal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-25 00:00:00.000000000 Z
11
+ date: 2016-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -168,6 +168,7 @@ files:
168
168
  - test/test_active_job_interposer.rb
169
169
  - test/test_agent.rb
170
170
  - test/test_delayed_job_interposer.rb
171
+ - test/test_kamikaze.rb
171
172
  - test/test_minitest_interposer.rb
172
173
  - test/test_railtie.rb
173
174
  - test/test_snapshotter.rb
@@ -205,6 +206,7 @@ test_files:
205
206
  - test/test_active_job_interposer.rb
206
207
  - test/test_agent.rb
207
208
  - test/test_delayed_job_interposer.rb
209
+ - test/test_kamikaze.rb
208
210
  - test/test_minitest_interposer.rb
209
211
  - test/test_railtie.rb
210
212
  - test/test_snapshotter.rb