tunemygc 1.0.1 → 1.0.2
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 +4 -4
- data/Gemfile.lock +6 -6
- data/README.md +5 -9
- data/lib/tunemygc/cli.rb +1 -1
- data/lib/tunemygc/syncer.rb +1 -1
- data/lib/tunemygc/version.rb +1 -1
- data/test/test_syncer.rb +7 -7
- data/tunemygc.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fbad2da645aa2d033f78de306ebd504cca2c5ca
|
4
|
+
data.tar.gz: c7ece64385753be5dcd120103c952b40213eb907
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a3a8bdcdae61551a2342fb4142434c2e1c0883a92667d26c4da71342d7b1a73ff9807ccfb8d274b2a7abad4cb4b52b071062ffbe0e5bc29500499d55e4a1fa5
|
7
|
+
data.tar.gz: d0cf1b7bbfee6f1bb9deba037a4ec61e57ca9eb9298664277ba76a6eb3cdf586c727662b02651d56c7b76090a17a856a86f9f9979b0d312c31f2cca61339b62d
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tunemygc (1.0)
|
5
|
-
activesupport
|
6
|
-
certified
|
4
|
+
tunemygc (1.0.1)
|
5
|
+
activesupport (~> 4.1)
|
6
|
+
certified (~> 1.0, >= 1.0.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
@@ -119,7 +119,7 @@ PLATFORMS
|
|
119
119
|
|
120
120
|
DEPENDENCIES
|
121
121
|
rails
|
122
|
-
rake
|
123
|
-
rake-compiler (~> 0.9.
|
122
|
+
rake (~> 10.3)
|
123
|
+
rake-compiler (~> 0.9, >= 0.9.5)
|
124
124
|
tunemygc!
|
125
|
-
webmock
|
125
|
+
webmock (~> 1.2, >= 1.2.0)
|
data/README.md
CHANGED
@@ -29,7 +29,7 @@ We used [Discourse](http://www.discourse.org) as our primary test harness as it'
|
|
29
29
|
Add to your Gemfile and run `bundle install`
|
30
30
|
|
31
31
|
``` sh
|
32
|
-
gem 'tunemygc'
|
32
|
+
gem 'tunemygc'
|
33
33
|
```
|
34
34
|
This gem linterposes itself into the Rails request/response lifecycles and piggy backs off the new GC events in Ruby 2.x for introspection. Tuning recommendations are handled through a web service at `https://tunemygc.com`. You will need a `rails > 4.1`, installation and MRI Ruby `2.1`, or later.
|
35
35
|
|
@@ -91,13 +91,9 @@ RUBY_GC_TOKEN=08de9e8822c847244b31290cedfc1d51 RUBY_GC_TUNE=1 bundle exec rails
|
|
91
91
|
|
92
92
|
#### Advanced
|
93
93
|
|
94
|
-
* `RUBY_GC_TUNE_REQUESTS=x`
|
94
|
+
* `RUBY_GC_TUNE_REQUESTS=x` (a numeric value eg. `200`)
|
95
95
|
|
96
|
-
Controls the interposer lifetime for sampling requests. It will enable itself, then remove request instrumentation after
|
97
|
-
|
98
|
-
* `RUBY_GC_TUNE_DEBUG=1`
|
99
|
-
|
100
|
-
As above, but dumps snapshots to Rails logger or STDOUT prior to submission. Mostly for developer use/support.
|
96
|
+
Controls the interposer lifetime for sampling requests. It will enable itself, then remove request instrumentation after the specified number of requests. A good minimum ballpark sample set would be 200.
|
101
97
|
|
102
98
|
## How do I use this?
|
103
99
|
|
@@ -163,7 +159,7 @@ We do however ask for a valid email address as a canonical reference for tuner t
|
|
163
159
|
|
164
160
|
When trouble strikes, please file an [issue](https://www.github.com/bear-metal/tunemygc/issues) or email Lourens directly <lourens@bearmetal.eu>
|
165
161
|
|
166
|
-
[Bear Metal
|
162
|
+
[Bear Metal](http://www.bearmetal.eu) is also available for consulting around general Rails performance, heap dump analysis (more tools coming soon) and custom Ruby extension development.
|
167
163
|
|
168
164
|
## License
|
169
165
|
|
@@ -171,7 +167,7 @@ When trouble strikes, please file an [issue](https://www.github.com/bear-metal/t
|
|
171
167
|
|
172
168
|
Copyright (c) 2015:
|
173
169
|
|
174
|
-
* [Bear Metal
|
170
|
+
* [Bear Metal](http://bearmetal.eu)
|
175
171
|
|
176
172
|
Permission is hereby granted, free of charge, to any person obtaining
|
177
173
|
a copy of this software and associated documentation files (the
|
data/lib/tunemygc/cli.rb
CHANGED
data/lib/tunemygc/syncer.rb
CHANGED
@@ -6,7 +6,7 @@ require 'timeout'
|
|
6
6
|
|
7
7
|
module TuneMyGc
|
8
8
|
class Syncer
|
9
|
-
TIMEOUT =
|
9
|
+
TIMEOUT = 20 #seconds
|
10
10
|
ENVIRONMENT = [ENV['RUBY_GC_TOKEN'], RUBY_VERSION, Rails.version, ENV.select {|k,v| k =~ /RUBY_GC_/ }, TuneMyGc::VERSION, GC::OPTS, GC::INTERNAL_CONSTANTS].freeze
|
11
11
|
|
12
12
|
attr_reader :uri, :client
|
data/lib/tunemygc/version.rb
CHANGED
data/test/test_syncer.rb
CHANGED
@@ -29,7 +29,7 @@ class TestSyncer < TuneMyGcTestCase
|
|
29
29
|
|
30
30
|
stub_request(:post, "https://tunemygc.com/ruby").
|
31
31
|
with(:body => "[#{ActiveSupport::JSON.encode(TuneMyGc::Syncer::ENVIRONMENT)},[1420152606.1162581,\"BOOTED\",{\"count\":32,\"heap_used\":950,\"heap_length\":1519,\"heap_increment\":569,\"heap_live_slot\":385225,\"heap_free_slot\":2014,\"heap_final_slot\":0,\"heap_swept_slot\":101119,\"heap_eden_page_length\":950,\"heap_tomb_page_length\":0,\"total_allocated_object\":2184137,\"total_freed_object\":1798912,\"malloc_increase\":9665288,\"malloc_limit\":16777216,\"minor_gc_count\":26,\"major_gc_count\":6,\"remembered_shady_object\":5145,\"remembered_shady_object_limit\":6032,\"old_object\":230164,\"old_object_limit\":301030,\"oldmalloc_increase\":11715304,\"oldmalloc_limit\":24159190},{\"major_by\":null,\"gc_by\":\"newobj\",\"have_finalizer\":false,\"immediate_sweep\":false},null]]",
|
32
|
-
:headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/json', 'User-Agent'=>
|
32
|
+
: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}"}).
|
33
33
|
to_return(:status => 200, :body => "https://www.tunemygc.com/configs/xxxxxxx", :headers => {})
|
34
34
|
|
35
35
|
out, err = capture_io do
|
@@ -47,7 +47,7 @@ class TestSyncer < TuneMyGcTestCase
|
|
47
47
|
snapshots.take_raw(Fixtures::STAGE_BOOTED)
|
48
48
|
stub_request(:post, "https://tunemygc.com/ruby").
|
49
49
|
with(:body => "[#{ActiveSupport::JSON.encode(TuneMyGc::Syncer::ENVIRONMENT)},[1420152606.1162581,\"BOOTED\",{\"count\":32,\"heap_used\":950,\"heap_length\":1519,\"heap_increment\":569,\"heap_live_slot\":385225,\"heap_free_slot\":2014,\"heap_final_slot\":0,\"heap_swept_slot\":101119,\"heap_eden_page_length\":950,\"heap_tomb_page_length\":0,\"total_allocated_object\":2184137,\"total_freed_object\":1798912,\"malloc_increase\":9665288,\"malloc_limit\":16777216,\"minor_gc_count\":26,\"major_gc_count\":6,\"remembered_shady_object\":5145,\"remembered_shady_object_limit\":6032,\"old_object\":230164,\"old_object_limit\":301030,\"oldmalloc_increase\":11715304,\"oldmalloc_limit\":24159190},{\"major_by\":null,\"gc_by\":\"newobj\",\"have_finalizer\":false,\"immediate_sweep\":false},null]]",
|
50
|
-
:headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/json', 'User-Agent'=>
|
50
|
+
: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}"}).
|
51
51
|
to_return(:status => 501, :body => "", :headers => {})
|
52
52
|
|
53
53
|
out, err = capture_io do
|
@@ -66,7 +66,7 @@ class TestSyncer < TuneMyGcTestCase
|
|
66
66
|
snapshots.take_raw(Fixtures::STAGE_BOOTED)
|
67
67
|
stub_request(:post, "https://tunemygc.com/ruby").
|
68
68
|
with(:body => "[#{ActiveSupport::JSON.encode(TuneMyGc::Syncer::ENVIRONMENT)},[1420152606.1162581,\"BOOTED\",{\"count\":32,\"heap_used\":950,\"heap_length\":1519,\"heap_increment\":569,\"heap_live_slot\":385225,\"heap_free_slot\":2014,\"heap_final_slot\":0,\"heap_swept_slot\":101119,\"heap_eden_page_length\":950,\"heap_tomb_page_length\":0,\"total_allocated_object\":2184137,\"total_freed_object\":1798912,\"malloc_increase\":9665288,\"malloc_limit\":16777216,\"minor_gc_count\":26,\"major_gc_count\":6,\"remembered_shady_object\":5145,\"remembered_shady_object_limit\":6032,\"old_object\":230164,\"old_object_limit\":301030,\"oldmalloc_increase\":11715304,\"oldmalloc_limit\":24159190},{\"major_by\":null,\"gc_by\":\"newobj\",\"have_finalizer\":false,\"immediate_sweep\":false},null]]",
|
69
|
-
:headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/json', 'User-Agent'=>
|
69
|
+
: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}"}).
|
70
70
|
to_return(:status => 412, :body => "", :headers => {})
|
71
71
|
|
72
72
|
out, err = capture_io do
|
@@ -83,7 +83,7 @@ class TestSyncer < TuneMyGcTestCase
|
|
83
83
|
snapshots.take_raw(Fixtures::STAGE_BOOTED)
|
84
84
|
stub_request(:post, "https://tunemygc.com/ruby").
|
85
85
|
with(:body => "[#{ActiveSupport::JSON.encode(TuneMyGc::Syncer::ENVIRONMENT)},[1420152606.1162581,\"BOOTED\",{\"count\":32,\"heap_used\":950,\"heap_length\":1519,\"heap_increment\":569,\"heap_live_slot\":385225,\"heap_free_slot\":2014,\"heap_final_slot\":0,\"heap_swept_slot\":101119,\"heap_eden_page_length\":950,\"heap_tomb_page_length\":0,\"total_allocated_object\":2184137,\"total_freed_object\":1798912,\"malloc_increase\":9665288,\"malloc_limit\":16777216,\"minor_gc_count\":26,\"major_gc_count\":6,\"remembered_shady_object\":5145,\"remembered_shady_object_limit\":6032,\"old_object\":230164,\"old_object_limit\":301030,\"oldmalloc_increase\":11715304,\"oldmalloc_limit\":24159190},{\"major_by\":null,\"gc_by\":\"newobj\",\"have_finalizer\":false,\"immediate_sweep\":false},null]]",
|
86
|
-
:headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/json', 'User-Agent'=>
|
86
|
+
: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}"}).
|
87
87
|
to_return(:status => 400, :body => "snapshot timestamp", :headers => {})
|
88
88
|
|
89
89
|
out, err = capture_io do
|
@@ -101,7 +101,7 @@ class TestSyncer < TuneMyGcTestCase
|
|
101
101
|
snapshots.take_raw(Fixtures::STAGE_BOOTED)
|
102
102
|
stub_request(:post, "https://tunemygc.com/ruby").
|
103
103
|
with(:body => "[#{ActiveSupport::JSON.encode(TuneMyGc::Syncer::ENVIRONMENT)},[1420152606.1162581,\"BOOTED\",{\"count\":32,\"heap_used\":950,\"heap_length\":1519,\"heap_increment\":569,\"heap_live_slot\":385225,\"heap_free_slot\":2014,\"heap_final_slot\":0,\"heap_swept_slot\":101119,\"heap_eden_page_length\":950,\"heap_tomb_page_length\":0,\"total_allocated_object\":2184137,\"total_freed_object\":1798912,\"malloc_increase\":9665288,\"malloc_limit\":16777216,\"minor_gc_count\":26,\"major_gc_count\":6,\"remembered_shady_object\":5145,\"remembered_shady_object_limit\":6032,\"old_object\":230164,\"old_object_limit\":301030,\"oldmalloc_increase\":11715304,\"oldmalloc_limit\":24159190},{\"major_by\":null,\"gc_by\":\"newobj\",\"have_finalizer\":false,\"immediate_sweep\":false},null]]",
|
104
|
-
:headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/json', 'User-Agent'=>
|
104
|
+
: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}"}).
|
105
105
|
to_return(:status => 404, :body => "", :headers => {})
|
106
106
|
|
107
107
|
out, err = capture_io do
|
@@ -117,7 +117,7 @@ class TestSyncer < TuneMyGcTestCase
|
|
117
117
|
snapshots.take_raw(Fixtures::STAGE_BOOTED)
|
118
118
|
stub_request(:post, "https://tunemygc.com/ruby").
|
119
119
|
with(:body => "[#{ActiveSupport::JSON.encode(TuneMyGc::Syncer::ENVIRONMENT)},[1420152606.1162581,\"BOOTED\",{\"count\":32,\"heap_used\":950,\"heap_length\":1519,\"heap_increment\":569,\"heap_live_slot\":385225,\"heap_free_slot\":2014,\"heap_final_slot\":0,\"heap_swept_slot\":101119,\"heap_eden_page_length\":950,\"heap_tomb_page_length\":0,\"total_allocated_object\":2184137,\"total_freed_object\":1798912,\"malloc_increase\":9665288,\"malloc_limit\":16777216,\"minor_gc_count\":26,\"major_gc_count\":6,\"remembered_shady_object\":5145,\"remembered_shady_object_limit\":6032,\"old_object\":230164,\"old_object_limit\":301030,\"oldmalloc_increase\":11715304,\"oldmalloc_limit\":24159190},{\"major_by\":null,\"gc_by\":\"newobj\",\"have_finalizer\":false,\"immediate_sweep\":false},null]]",
|
120
|
-
:headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/json', 'User-Agent'=>
|
120
|
+
: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}"}).
|
121
121
|
to_return(:status => 426, :body => "2", :headers => {})
|
122
122
|
|
123
123
|
out, err = capture_io do
|
@@ -134,7 +134,7 @@ class TestSyncer < TuneMyGcTestCase
|
|
134
134
|
snapshots.take_raw(Fixtures::STAGE_BOOTED)
|
135
135
|
stub_request(:post, "https://tunemygc.com/ruby").
|
136
136
|
with(:body => "[#{ActiveSupport::JSON.encode(TuneMyGc::Syncer::ENVIRONMENT)},[1420152606.1162581,\"BOOTED\",{\"count\":32,\"heap_used\":950,\"heap_length\":1519,\"heap_increment\":569,\"heap_live_slot\":385225,\"heap_free_slot\":2014,\"heap_final_slot\":0,\"heap_swept_slot\":101119,\"heap_eden_page_length\":950,\"heap_tomb_page_length\":0,\"total_allocated_object\":2184137,\"total_freed_object\":1798912,\"malloc_increase\":9665288,\"malloc_limit\":16777216,\"minor_gc_count\":26,\"major_gc_count\":6,\"remembered_shady_object\":5145,\"remembered_shady_object_limit\":6032,\"old_object\":230164,\"old_object_limit\":301030,\"oldmalloc_increase\":11715304,\"oldmalloc_limit\":24159190},{\"major_by\":null,\"gc_by\":\"newobj\",\"have_finalizer\":false,\"immediate_sweep\":false},null]]",
|
137
|
-
:headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/json', 'User-Agent'=>
|
137
|
+
: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_raise(IOError.new("dang"))
|
138
138
|
|
139
139
|
out, err = capture_io do
|
140
140
|
TuneMyGc.logger = Logger.new($stdout)
|
data/tunemygc.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.version = TuneMyGc::VERSION
|
10
10
|
s.summary = "TuneMyGC - optimal MRI Ruby 2.1+ Garbage Collection"
|
11
11
|
s.description = "Agent for the GC tuning webservice https://www.tunemygc.com - optimal settings for throughput and memory usage of Rails applications"
|
12
|
-
s.authors = ["Bear Metal
|
12
|
+
s.authors = ["Bear Metal"]
|
13
13
|
s.email = ["info@bearmetal.eu"]
|
14
14
|
s.license = "MIT"
|
15
15
|
s.homepage = "https://tunemygc.com"
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Bear Metal
|
7
|
+
- Bear Metal
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|