tunemygc 1.0.21 → 1.0.22
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/README.md +8 -12
- data/lib/tunemygc.rb +4 -0
- data/lib/tunemygc/agent.rb +0 -4
- data/lib/tunemygc/cli.rb +2 -2
- data/lib/tunemygc/spies.rb +1 -0
- data/lib/tunemygc/spies/rspec.rb +59 -0
- data/lib/tunemygc/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9672bbb45047e92d9539dc1cb38852dfbb0e2cc6
|
4
|
+
data.tar.gz: 1d3f3d06a6c128a0d982ede89904f237d78610f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66ef450dba0017bf54915abda65be2fbbba8729f1fb096df36bea2d4bf30d50532d64d04f3db3c42bf3629378186fc2a6b649893d0e77a8f8ee0e1971ac127b3
|
7
|
+
data.tar.gz: e631316dc487e2dd4d7ca190ccd33c062f1e614305abc8c854d3093f5a4b28e3230b96d012e9d5a975c4842366bcadfe966f5f01a496be054e39fd1c49669c11
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/bear-metal/tunemygc)
|
4
4
|
|
5
|
-
The Ruby garbage collector has been flagged as the crux of Ruby performance and memory use for a long time. It has improved a lot over the last years, but there's still a lot to tune and control. *The default configuration is not suitable and optimal for
|
5
|
+
The Ruby garbage collector has been flagged as the crux of Ruby performance and memory use for a long time. It has improved a lot over the last years, but there's still a lot to tune and control. *The default configuration is not suitable and optimal for large Ruby applications, and neither is there a one-size-fits-all set of tuned parameters that would suit every app.* However, hand-tuning the GC parameters is a slippery slope to navigate for most developers.
|
6
6
|
|
7
7
|
## We're fixing this
|
8
8
|
|
@@ -33,11 +33,7 @@ Add to your Gemfile and run `bundle install`
|
|
33
33
|
``` sh
|
34
34
|
gem 'tunemygc'
|
35
35
|
```
|
36
|
-
This gem linterposes itself into the
|
37
|
-
|
38
|
-
#### Windows
|
39
|
-
|
40
|
-
Has not been tested at all.
|
36
|
+
This gem linterposes itself into the application 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 MRI Ruby `2.1`, or later. [Rails](http://www.rubyonrails.org) applications, background jobs, tests and any proprietary Ruby scripts and frameworks are supported.
|
41
37
|
|
42
38
|
## Getting started
|
43
39
|
|
@@ -50,7 +46,7 @@ Application registered. Use RUBY_GC_TOKEN=08de9e8822c847244b31290cedfc1d51 in yo
|
|
50
46
|
|
51
47
|
We require a valid email address as a canonical reference for tuner tokens for your applications.
|
52
48
|
|
53
|
-
For the above command sequences, to sample your
|
49
|
+
For the above command sequences, to sample your app or script for tuning, run (inject `RUBY_GC_TOKEN` and `RUBY_GC_TUNE` to your env):
|
54
50
|
|
55
51
|
``` sh
|
56
52
|
RUBY_GC_TOKEN=08de9e8822c847244b31290cedfc1d51 RUBY_GC_TUNE=1 bundle exec rails s
|
@@ -61,8 +57,8 @@ The CLI interface supports retrieving configuration options for your application
|
|
61
57
|
``` sh
|
62
58
|
$ bundle exec tunemygc
|
63
59
|
Usage: tunemygc [options]
|
64
|
-
-r, --register EMAIL Register this
|
65
|
-
-c, --config TOKEN Fetch the last known config for a given
|
60
|
+
-r, --register EMAIL Register this application with the https://tunemygc.com service
|
61
|
+
-c, --config TOKEN Fetch the last known config for a given application
|
66
62
|
-h, --help How to use the TuneMyGC agent CLI
|
67
63
|
```
|
68
64
|
|
@@ -93,9 +89,9 @@ RUBY_GC_TOKEN=08de9e8822c847244b31290cedfc1d51 RUBY_GC_TUNE=1 bundle exec rails
|
|
93
89
|
|
94
90
|
#### Advanced
|
95
91
|
|
96
|
-
* `RUBY_GC_SPY=action_controller` (Spy on the GC for this type of processing. `action_controller`, `active_job` or `
|
92
|
+
* `RUBY_GC_SPY=action_controller` (Spy on the GC for this type of processing. `action_controller`, `active_job`, `minitest` or `rspec` are supported)
|
97
93
|
|
98
|
-
Defines what type of processing you would like to sample for GC activity. An Action Controller spy is the default, but [ActiveJob](https://github.com/rails/rails/tree/master/activejob)
|
94
|
+
Defines what type of processing you would like to sample for GC activity. An Action Controller spy is the default, but [ActiveJob](https://github.com/rails/rails/tree/master/activejob), [minitest](https://github.com/seattlerb/minitest) and [rspec](http://rspec.info) are also supported as experimental features.
|
99
95
|
|
100
96
|
* `RUBY_GC_TUNE_REQUESTS=x` (a numeric value eg. `200`)
|
101
97
|
|
@@ -107,7 +103,7 @@ Controls the interposer lifetime for sampling ActiveJob jobs. It will enable its
|
|
107
103
|
|
108
104
|
* `RUBY_GC_TUNE_TESTS=x` (a numeric value eg. `200`)
|
109
105
|
|
110
|
-
Controls the interposer lifetime for sampling a [minitest](https://github.com/seattlerb/minitest) based test suite. It will enable itself, then remove request instrumentation after the specified number of tests has been run. A good minimum ballpark sample set would be 200.
|
106
|
+
Controls the interposer lifetime for sampling a [minitest](https://github.com/seattlerb/minitest) or [rspec](http://rspec.info) based test suite. It will enable itself, then remove request instrumentation after the specified number of tests has been run. A good minimum ballpark sample set would be 200.
|
111
107
|
|
112
108
|
## How do I use this?
|
113
109
|
|
data/lib/tunemygc.rb
CHANGED
data/lib/tunemygc/agent.rb
CHANGED
data/lib/tunemygc/cli.rb
CHANGED
@@ -13,10 +13,10 @@ module TuneMyGc
|
|
13
13
|
OptionParser.new do |opts|
|
14
14
|
opts.banner = "Usage: tunemygc [options]"
|
15
15
|
|
16
|
-
opts.on("-r ", "--register EMAIL", "Register this
|
16
|
+
opts.on("-r ", "--register EMAIL", "Register this application with the https://tunemygc.com service") do |email|
|
17
17
|
options[:email] = email
|
18
18
|
end
|
19
|
-
opts.on("-c ", "--config TOKEN", "Fetch the last known config for a given
|
19
|
+
opts.on("-c ", "--config TOKEN", "Fetch the last known config for a given application") do |token|
|
20
20
|
options[:config] = token
|
21
21
|
end
|
22
22
|
opts.on_tail("-h", "--help", "How to use the TuneMyGC agent CLI") do
|
data/lib/tunemygc/spies.rb
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
|
5
|
+
module TuneMyGc
|
6
|
+
module Spies
|
7
|
+
class Rspec
|
8
|
+
def initialize
|
9
|
+
@tests_processed = 0
|
10
|
+
@tests_limit = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def install
|
14
|
+
RSpec::Core.__send__(:include, hooks_module)
|
15
|
+
TuneMyGc.log "hooked: rspec"
|
16
|
+
end
|
17
|
+
|
18
|
+
def uninstall
|
19
|
+
TuneMyGc.uninstall_gc_tracepoint
|
20
|
+
TuneMyGc.log "uninstalled GC tracepoint"
|
21
|
+
RSpec::Core.__send__(:include, disabled_hooks_module)
|
22
|
+
TuneMyGc.log "uninstalled rspec spy"
|
23
|
+
end
|
24
|
+
|
25
|
+
def check_uninstall
|
26
|
+
if ENV["RUBY_GC_TUNE_TESTS"]
|
27
|
+
@tests_limit ||= Integer(ENV["RUBY_GC_TUNE_TESTS"])
|
28
|
+
@tests_processed += 1
|
29
|
+
if @tests_processed == @tests_limit
|
30
|
+
uninstall
|
31
|
+
TuneMyGc.log "kamikaze after #{@tests_processed} of #{@tests_limit} tests"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def hooks_module
|
37
|
+
Module.new do
|
38
|
+
RSpec.configure do |c|
|
39
|
+
c.before(:all) { TuneMyGc.processing_started }
|
40
|
+
c.after(:all) { TuneMyGc.processing_ended }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def disabled_hooks_module
|
46
|
+
Module.new do
|
47
|
+
private
|
48
|
+
def tunemygc_before_setup
|
49
|
+
# noop
|
50
|
+
end
|
51
|
+
|
52
|
+
def tunemygc_after_teardown
|
53
|
+
# noop
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/tunemygc/version.rb
CHANGED
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.22
|
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-
|
11
|
+
date: 2015-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -149,6 +149,7 @@ files:
|
|
149
149
|
- lib/tunemygc/spies/active_job.rb
|
150
150
|
- lib/tunemygc/spies/manual.rb
|
151
151
|
- lib/tunemygc/spies/minitest.rb
|
152
|
+
- lib/tunemygc/spies/rspec.rb
|
152
153
|
- lib/tunemygc/subscriber.rb
|
153
154
|
- lib/tunemygc/syncer.rb
|
154
155
|
- lib/tunemygc/version.rb
|