tunemygc 1.0.64 → 1.0.65
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -1
- data/lib/tunemygc/agent.rb +8 -0
- data/lib/tunemygc/interposer.rb +3 -3
- data/lib/tunemygc/version.rb +1 -1
- data/test/fixtures.rb +2 -0
- data/test/helper.rb +1 -0
- data/test/test_kamikaze.rb +5 -10
- data/tunemygc.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e456b67daee462454a91d41bfb7bffeb4bbbba00
|
4
|
+
data.tar.gz: 3a94a780936d276e6a2e7f224d107119760927d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f14abe4c4b39b0e6558eb4a61d46d815b98c8886687fb5bf6604d5994505e642ba90934638b15cf7d9868fe3d046f12976c3409029fe4ca6fe8bb7c3a6a9971b
|
7
|
+
data.tar.gz: dd36f2c2b63d3614b4f969349867150486184f72ee626c47985e88bc364a35b2b3ef61ac97844e602e66fc563181839174a90351366b48ed54a84ee35d2b657f
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tunemygc (1.0.
|
4
|
+
tunemygc (1.0.65)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -58,9 +58,12 @@ GEM
|
|
58
58
|
nokogiri (>= 1.5.9)
|
59
59
|
mail (2.6.3)
|
60
60
|
mime-types (>= 1.16, < 3)
|
61
|
+
metaclass (0.0.4)
|
61
62
|
mime-types (2.4.3)
|
62
63
|
mini_portile (0.6.2)
|
63
64
|
minitest (5.5.0)
|
65
|
+
mocha (1.1.0)
|
66
|
+
metaclass (~> 0.0.1)
|
64
67
|
multi_json (1.10.1)
|
65
68
|
nokogiri (1.6.5)
|
66
69
|
mini_portile (~> 0.6.0)
|
@@ -120,6 +123,7 @@ DEPENDENCIES
|
|
120
123
|
activejob (~> 4.2, >= 4.2.0)
|
121
124
|
activesupport (~> 4.1)
|
122
125
|
delayed_job (~> 4.0.6, >= 4.0.6)
|
126
|
+
mocha (~> 1.1.0)
|
123
127
|
rails
|
124
128
|
rake (~> 10.3)
|
125
129
|
rake-compiler (~> 0.9, >= 0.9.5)
|
data/lib/tunemygc/agent.rb
CHANGED
@@ -24,6 +24,14 @@ module TuneMyGc
|
|
24
24
|
interposer.check_uninstall
|
25
25
|
end
|
26
26
|
|
27
|
+
def terminated
|
28
|
+
snapshot(:TERMINATED, count_objects)
|
29
|
+
end
|
30
|
+
|
31
|
+
def count_objects
|
32
|
+
ObjectSpace.count_objects.merge(:memsize => ObjectSpace.memsize_of_all)
|
33
|
+
end
|
34
|
+
|
27
35
|
def snapshot(stage, meta = nil)
|
28
36
|
snapshotter.take(stage, meta)
|
29
37
|
end
|
data/lib/tunemygc/interposer.rb
CHANGED
@@ -41,7 +41,7 @@ module TuneMyGc
|
|
41
41
|
if @installed
|
42
42
|
TuneMyGc.log "at_exit"
|
43
43
|
@spies.each{|s| s.uninstall }
|
44
|
-
TuneMyGc.
|
44
|
+
TuneMyGc.terminated
|
45
45
|
TuneMyGc.recommendations
|
46
46
|
end
|
47
47
|
end
|
@@ -63,9 +63,9 @@ module TuneMyGc
|
|
63
63
|
|
64
64
|
def kamikaze
|
65
65
|
Thread.new do
|
66
|
-
TuneMyGc.
|
66
|
+
TuneMyGc.terminated
|
67
67
|
TuneMyGc.log "kamikaze: synching #{TuneMyGc.snapshotter.size} GC sample snapshots ahead of time (usually only on process exit)"
|
68
|
-
Timeout.timeout(
|
68
|
+
Timeout.timeout(TuneMyGc::KAMIZE_SYNC_TIMEOUT) do
|
69
69
|
begin
|
70
70
|
TuneMyGc.recommendations
|
71
71
|
reset
|
data/lib/tunemygc/version.rb
CHANGED
data/test/fixtures.rb
CHANGED
@@ -5,5 +5,7 @@ require 'time'
|
|
5
5
|
module Fixtures
|
6
6
|
STAGE_BOOTED = [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"=>nil, "gc_by"=>"newobj", "have_finalizer"=>false, "immediate_sweep"=>false}, nil,70201748333020]
|
7
7
|
|
8
|
+
STAGE_TERMINATED = [1457439029.721803, 44163072, 44163072, :TERMINATED, [35, 423, 424, 2, 172416, 101940, 70476, 0, 88739, 83678, 421, 2, 423, 0, 812388, 710448, 3906512, 16777216, 20, 15, 1037, 2074, 86916, 173832, 3906896, 16777216], {:major_by=>:force, :gc_by=>:method, :have_finalizer=>false, :immediate_sweep=>true, :state=>:none}, {:TOTAL=>172416, :FREE=>70481, :T_OBJECT=>4700, :T_CLASS=>2664, :T_MODULE=>327, :T_FLOAT=>15, :T_STRING=>45833, :T_REGEXP=>1010, :T_ARRAY=>19765, :T_HASH=>5847, :T_STRUCT=>129, :T_BIGNUM=>4, :T_FILE=>3, :T_DATA=>11096, :T_MATCH=>34, :T_COMPLEX=>1, :T_RATIONAL=>59, :T_SYMBOL=>57, :T_NODE=>10063, :T_ICLASS=>328, :memsize=>27802912}, nil]
|
9
|
+
|
8
10
|
CONFIG = {"Memory"=>{"RUBY_GC_HEAP_INIT_SLOTS"=>307562,"RUBY_GC_HEAP_FREE_SLOTS"=>6151,"RUBY_GC_HEAP_GROWTH_FACTOR"=>0.07,"RUBY_GC_HEAP_GROWTH_MAX_SLOTS"=>6151,"RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR"=>0.11,"RUBY_GC_MALLOC_LIMIT"=>2000000,"RUBY_GC_MALLOC_LIMIT_MAX"=>4000000,"RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR"=>0.11,"RUBY_GC_OLDMALLOC_LIMIT"=>2000000,"RUBY_GC_OLDMALLOC_LIMIT_MAX"=>4000000,"RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR"=>0.11},"Speed"=>{"RUBY_GC_HEAP_INIT_SLOTS"=>369074,"RUBY_GC_HEAP_FREE_SLOTS"=>184537,"RUBY_GC_HEAP_GROWTH_FACTOR"=>1.2,"RUBY_GC_HEAP_GROWTH_MAX_SLOTS"=>123024,"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.2,"RUBY_GC_OLDMALLOC_LIMIT"=>64000000,"RUBY_GC_OLDMALLOC_LIMIT_MAX"=>128000000,"RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR"=>1.2}, "callback"=>"https://tunemygc.com/configs/8d07e13cc5a7bba2da3510b9ca5e75f4.json"}
|
9
11
|
end
|
data/test/helper.rb
CHANGED
data/test/test_kamikaze.rb
CHANGED
@@ -7,20 +7,15 @@ class TestKamikaze < MiniTest::Unit::TestCase
|
|
7
7
|
syncer = TuneMyGc::Syncer.new
|
8
8
|
snapshots = TuneMyGc::Snapshotter.new
|
9
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
|
-
|
10
|
+
TuneMyGc.stubs(:terminated).returns(Fixtures::STAGE_TERMINATED)
|
15
11
|
stub_request(:post, "https://tunemygc.com/ruby").
|
16
|
-
with(:body => "[#{ActiveSupport::JSON.encode(syncer.environment(snapshots))},[
|
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 => {})
|
12
|
+
with(:body => "[#{ActiveSupport::JSON.encode(syncer.environment(snapshots))},[1457436980.906017,42086400,42086400,\"TERMINATED\",[25,423,424,0,172410,170706,1704,0,88657,9006,423,0,423,0,793852,623146,1211456,16777216,20,5,1013,1354,86740,113636,13091056,16777216],{\"major_by\":null,\"gc_by\":\"newobj\",\"have_finalizer\":false,\"immediate_sweep\":false,\"state\":\"sweeping\"},{\"TOTAL\":172414,\"FREE\":85621,\"T_OBJECT\":4602,\"T_CLASS\":2521,\"T_MODULE\":287,\"T_FLOAT\":14,\"T_STRING\":43165,\"T_REGEXP\":996,\"T_ARRAY\":15116,\"T_HASH\":1737,\"T_STRUCT\":122,\"T_BIGNUM\":4,\"T_FILE\":3,\"T_DATA\":10450,\"T_MATCH\":8,\"T_COMPLEX\":1,\"T_RATIONAL\":59,\"T_SYMBOL\":57,\"T_NODE\":7340,\"T_ICLASS\":311,\"memsize\":22896062},null]]",
|
13
|
+
: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}"}).to_return(:status => 200, :body => "", :headers => {})
|
19
14
|
out, err = capture_io do
|
20
15
|
TuneMyGc.logger = Logger.new($stdout)
|
21
|
-
TuneMyGc.interposer.kamikaze
|
16
|
+
TuneMyGc.interposer.kamikaze.join(1)
|
22
17
|
end
|
23
|
-
sleep 1
|
24
18
|
assert_match(/kamikaze\: synching \d GC sample snapshots ahead of time \(usually only on process exit\)/, out)
|
19
|
+
assert_match(/Syncing \d snapshots/, out)
|
25
20
|
end
|
26
21
|
end
|
data/tunemygc.gemspec
CHANGED
@@ -28,4 +28,5 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_development_dependency('webmock', '~> 1.2', '>= 1.2.0')
|
29
29
|
s.add_development_dependency('activejob', '~> 4.2', '>= 4.2.0')
|
30
30
|
s.add_development_dependency('delayed_job', '~> 4.0.6', '>= 4.0.6')
|
31
|
+
s.add_development_dependency('mocha', '~> 1.1.0')
|
31
32
|
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.
|
4
|
+
version: 1.0.65
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bear Metal
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -118,6 +118,20 @@ dependencies:
|
|
118
118
|
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
120
|
version: 4.0.6
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: mocha
|
123
|
+
requirement: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - "~>"
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: 1.1.0
|
128
|
+
type: :development
|
129
|
+
prerelease: false
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - "~>"
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: 1.1.0
|
121
135
|
description: Agent for the GC tuning webservice https://www.tunemygc.com - optimal
|
122
136
|
settings for throughput and memory usage of Ruby applications
|
123
137
|
email:
|