derailed_benchmarks 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -3
- data/Gemfile.lock +3 -1
- data/README.md +47 -1
- data/derailed_benchmarks.gemspec +1 -0
- data/lib/derailed_benchmarks/tasks.rb +20 -0
- data/lib/derailed_benchmarks/version.rb +1 -1
- 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: 375f243912a424ba45e64e6fd2c1aeb7c1349f1d
|
4
|
+
data.tar.gz: 65bc16f1ba1b5fe109c5971eac8e67c73ba30057
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7af36f99ed23a45e684fd220c497673f529227530194693fea67cffc3f9ecbecac720adda9e1fa9576f26e3051834b14584d0135e290a3b5148b1c7fd7d75001
|
7
|
+
data.tar.gz: 97c8617852ade4dfbf9eabfe995431be69dabf860de03d8066205ed960313d17024722cc9ae5847b5835c280e174f6fdc3661cfeb923491a80b3cf9921950280
|
data/CHANGELOG.md
CHANGED
@@ -1,24 +1,28 @@
|
|
1
1
|
# A Log of Changes!
|
2
2
|
|
3
|
+
## [1.1.1] - 2015-10-01
|
4
|
+
|
5
|
+
- Added ability to create a heap dump `perf:heap`.
|
6
|
+
|
3
7
|
## [1.1.0] - 2015-09-09
|
4
8
|
|
5
9
|
- Set custom auth user using a lambda in perf.rake
|
6
10
|
- Changed `perf:ram_over_time` changed to `perf:mem_over_time`
|
7
11
|
- Fixed gem warnings
|
8
12
|
|
9
|
-
## [1.0.1] - 2015-20
|
13
|
+
## [1.0.1] - 2015-06-20
|
10
14
|
|
11
15
|
- `bundle:mem` and similar tasks now keep track of duplicate requires and display them along side of memory requirements. This makes it easier to identify where components are used by multiple libraries
|
12
16
|
- Add rake to gemspec which gets rid of `Unresolved specs during Gem::Specification.reset:` warning
|
13
17
|
- Outputs of memory are now done in [mebibytes](https://en.wikipedia.org/wiki/Mebibyte), a more accurate unit for the value we're measuring (hint: it's what you think MB is).
|
14
18
|
|
15
|
-
## [1.0.0] - 2015-
|
19
|
+
## [1.0.0] - 2015-05-14
|
16
20
|
|
17
21
|
- Added `derailed` command line utility. Can be used with just a Gemfile using command `$ derailed bundle:mem` and `$ derailed bundle:objects`. All existing Rake tasks can now be called with `$ derailed exec` such as `$ derailed exec perf:mem`.
|
18
22
|
- Changed memory_profiler task to be `perf:objects` instead of `perf:mem`.
|
19
23
|
- Changed boot time memory measurement to `perf:mem` instead of `perf:require_bench`
|
20
24
|
- Released seperate [derailed](https://github.com/schneems/derailed) gem that is a wrapper for this gem. I.e. installing that gem installs this one. Easier to remember, less words to type. Also means there's no colision using the `derailed` namespace for executables inside of the `derailed_benchmarks`.
|
21
25
|
|
22
|
-
## [0.0.0] - 2014-15
|
26
|
+
## [0.0.0] - 2014-08-15
|
23
27
|
|
24
28
|
- Initial release
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
derailed_benchmarks (1.1.
|
4
|
+
derailed_benchmarks (1.1.1)
|
5
5
|
benchmark-ips (~> 2)
|
6
6
|
get_process_mem (~> 0)
|
7
|
+
heap_inspect (~> 0)
|
7
8
|
memory_profiler (~> 0)
|
8
9
|
rack (~> 1)
|
9
10
|
rake (~> 10)
|
@@ -58,6 +59,7 @@ GEM
|
|
58
59
|
warden (~> 1.2.3)
|
59
60
|
erubis (2.7.0)
|
60
61
|
get_process_mem (0.2.0)
|
62
|
+
heap_inspect (0.1.0)
|
61
63
|
hike (1.2.3)
|
62
64
|
i18n (0.7.0)
|
63
65
|
journey (1.0.4)
|
data/README.md
CHANGED
@@ -271,6 +271,32 @@ This is an expensive operation, so you likely want to keep the count lowish. Onc
|
|
271
271
|
|
272
272
|
This is is similar to `$ bundle exec derailed bundle:objects` however it includes objects created at runtime. It's much more useful for actual production performance debugging, the other is more useful for library authors to debug.
|
273
273
|
|
274
|
+
## I want a Heap Dump
|
275
|
+
|
276
|
+
If you're still struggling with runtime memory you can generate a heap dump that can later be analyzed using [heap_inspect](https://github.com/schneems/heap_inspect).
|
277
|
+
|
278
|
+
|
279
|
+
```
|
280
|
+
$ bundle exec derailed exec perf:heap
|
281
|
+
Booting: production
|
282
|
+
Heap file generated: "tmp/2015-10-01T12:31:03-05:00-heap.dump"
|
283
|
+
|
284
|
+
Analyzing Heap
|
285
|
+
==============
|
286
|
+
Generation: 0 object count: 209307
|
287
|
+
Generation: 35 object count: 31236
|
288
|
+
Generation: 36 object count: 36705
|
289
|
+
Generation: 37 object count: 1301
|
290
|
+
Generation: 38 object count: 8
|
291
|
+
|
292
|
+
Try uploading "tmp/2015-10-01T12:31:03-05:00-heap.dump" to http://tenderlove.github.io/heap-analyzer/
|
293
|
+
```
|
294
|
+
|
295
|
+
For more help on getting data from a heap dump see
|
296
|
+
|
297
|
+
```
|
298
|
+
$ heap_inspect --help
|
299
|
+
```
|
274
300
|
|
275
301
|
### Memory Is large at boot.
|
276
302
|
|
@@ -410,7 +436,7 @@ change this if your app doesn't run locally with `RAILS_ENV` set to
|
|
410
436
|
`production`. For example:
|
411
437
|
|
412
438
|
```
|
413
|
-
$ RAILS_ENV=development bundle exec derailed exec perf:mem
|
439
|
+
$ RAILS_ENV=development bundle exec derailed exec perf:mem
|
414
440
|
```
|
415
441
|
|
416
442
|
## perf.rake
|
@@ -464,6 +490,26 @@ end
|
|
464
490
|
|
465
491
|
Set the constant `DERAILED_APP` to your Rack app. See [schneems/derailed_benchmarks#1](https://github.com/schneems/derailed_benchmarks/pull/1) for more info.
|
466
492
|
|
493
|
+
An example of setting this up could look like:
|
494
|
+
|
495
|
+
|
496
|
+
```ruby
|
497
|
+
# perf.rake
|
498
|
+
|
499
|
+
require 'bundler'
|
500
|
+
Bundler.setup
|
501
|
+
|
502
|
+
require 'derailed_benchmarks'
|
503
|
+
require 'derailed_benchmarks/tasks'
|
504
|
+
|
505
|
+
namespace :perf do
|
506
|
+
task :rack_load do
|
507
|
+
require_relative 'lib/application'
|
508
|
+
DERAILED_APP = MyApplication::Routes
|
509
|
+
end
|
510
|
+
end
|
511
|
+
```
|
512
|
+
|
467
513
|
## Authentication
|
468
514
|
|
469
515
|
If you're trying to test an endpoint that has authentication you'll need to tell your task how to bypass that authentication. Authentication is controlled by the `DerailedBenchmarks.auth` object. There is a built in support for Devise. If you're using some other authentication method, you can write your own authentication strategy.
|
data/derailed_benchmarks.gemspec
CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
+
gem.add_dependency "heap_inspect", "~> 0"
|
21
22
|
gem.add_dependency "memory_profiler", "~> 0"
|
22
23
|
gem.add_dependency "get_process_mem", "~> 0"
|
23
24
|
gem.add_dependency "benchmark-ips", "~> 2"
|
@@ -263,4 +263,24 @@ namespace :perf do
|
|
263
263
|
end
|
264
264
|
report.pretty_print
|
265
265
|
end
|
266
|
+
|
267
|
+
desc "heap analyzer"
|
268
|
+
task :heap => [:setup] do
|
269
|
+
require 'objspace'
|
270
|
+
|
271
|
+
file_name = "tmp/#{Time.now.iso8601}-heap.dump"
|
272
|
+
ObjectSpace.trace_object_allocations_start
|
273
|
+
call_app
|
274
|
+
GC.start
|
275
|
+
|
276
|
+
puts "Heap file generated: #{ file_name.inspect }"
|
277
|
+
ObjectSpace.dump_all(output: File.open(file_name, 'w'))
|
278
|
+
|
279
|
+
require 'heap_inspect'
|
280
|
+
|
281
|
+
HeapInspect::Analyzer.new(file_name).analyze
|
282
|
+
|
283
|
+
puts ""
|
284
|
+
puts "Try uploading #{file_name.inspect} to http://tenderlove.github.io/heap-analyzer/"
|
285
|
+
end
|
266
286
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: derailed_benchmarks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Schneeman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: heap_inspect
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: memory_profiler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|