leak_profiler 0.4.1 → 0.5.0
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/.rubocop.yml +3 -0
- data/Rakefile +6 -1
- data/ext/leak_profiler/extconf.rb +7 -0
- data/ext/leak_profiler/leak_profiler.c +37 -0
- data/lib/leak_profiler/allocations.rb +6 -0
- data/lib/leak_profiler/memory_memsize.rb +5 -0
- data/lib/leak_profiler/memory_usage.rb +6 -5
- data/lib/leak_profiler.rb +1 -0
- data/sig/generated/leak_profiler/allocations.rbs +27 -0
- data/sig/generated/leak_profiler/memory_memsize.rbs +14 -0
- data/sig/generated/leak_profiler/memory_usage.rbs +14 -0
- data/sig/leak_profiler.rbs +5 -0
- data/test/test_memory_usage.rb +10 -0
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e7942b0713d364d60dcfbeb171894c69aa63028adc6795d4b48e85d6019152d
|
4
|
+
data.tar.gz: '05967d0eefaf0301b380620c23b5eb925ac62a26ad45c1504a7ff2e6690f537a'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b430a5fe0d7ad6fc90d1dd1f949aeb0b2948487a6f651b4c52975774b4e5cb21ab98a9f7219e8c665f90daa3c70f6aa3d3c803ffdc9aa48acddd0e0e95d8bf15
|
7
|
+
data.tar.gz: 175e865aa10c22816d9b86c04301a0c574af0260becbe3fdf76b78d8f338b466fdc2170431a4244e0296ed47b27223879e52c60060363654f1adc8da7cd49638
|
data/.rubocop.yml
CHANGED
data/Rakefile
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'bundler/gem_tasks'
|
4
|
+
require 'rake/extensiontask'
|
4
5
|
require 'rake/testtask'
|
5
6
|
|
6
|
-
task default:
|
7
|
+
task default: %i[compile test]
|
8
|
+
|
9
|
+
Rake::ExtensionTask.new('leak_profiler_ext') do |ext|
|
10
|
+
ext.ext_dir = 'ext/leak_profiler'
|
11
|
+
end
|
7
12
|
|
8
13
|
Rake::TestTask.new do |task|
|
9
14
|
task.pattern = 'test/test_*.rb'
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#include "ruby.h"
|
2
|
+
|
3
|
+
#if defined(_WIN32)
|
4
|
+
#include <psapi.h>
|
5
|
+
|
6
|
+
static VALUE leak_profiler_max_rss(VALUE self)
|
7
|
+
{
|
8
|
+
PROCESS_MEMORY_COUNTERS pmc;
|
9
|
+
if (!GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc))) {
|
10
|
+
rb_sys_fail("GetProcessMemoryInfo");
|
11
|
+
}
|
12
|
+
return LONG2NUM(pmc.PeakWorkingSetSize);
|
13
|
+
}
|
14
|
+
|
15
|
+
#else
|
16
|
+
#include <sys/resource.h>
|
17
|
+
|
18
|
+
static VALUE leak_profiler_max_rss(VALUE self)
|
19
|
+
{
|
20
|
+
struct rusage usage;
|
21
|
+
if (getrusage(RUSAGE_SELF, &usage) == -1) {
|
22
|
+
rb_sys_fail("getrusage");
|
23
|
+
}
|
24
|
+
|
25
|
+
return LONG2NUM(usage.ru_maxrss);
|
26
|
+
}
|
27
|
+
|
28
|
+
#endif
|
29
|
+
|
30
|
+
void Init_leak_profiler_ext(void)
|
31
|
+
{
|
32
|
+
VALUE cLeakProfiler = rb_define_class("LeakProfiler", rb_cObject);
|
33
|
+
VALUE cMemoryUsage = rb_define_class_under(cLeakProfiler, "MemoryUsage", rb_cObject);
|
34
|
+
|
35
|
+
|
36
|
+
rb_define_singleton_method(cMemoryUsage, "max_rss", leak_profiler_max_rss, 0);
|
37
|
+
}
|
@@ -1,11 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# rbs_inline: enabled
|
4
|
+
|
3
5
|
require 'objspace'
|
4
6
|
|
5
7
|
class LeakProfiler
|
6
8
|
class Allocations
|
7
9
|
attr_reader :thread
|
8
10
|
|
11
|
+
# @rbs logger: untyped
|
12
|
+
# @rbs interval: Integer
|
13
|
+
# @rbs max_allocations: Integer
|
14
|
+
# @rbs max_referrers: Integer
|
9
15
|
def initialize(logger:, interval:, max_allocations:, max_referrers:)
|
10
16
|
@logger = logger
|
11
17
|
@interval = interval
|
@@ -1,11 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# rbs_inline: enabled
|
4
|
+
|
3
5
|
require 'objspace'
|
4
6
|
|
5
7
|
class LeakProfiler
|
6
8
|
class MemoryMemsize
|
7
9
|
attr_reader :thread
|
8
10
|
|
11
|
+
# @rbs output_dir: String
|
12
|
+
# @rbs interval: Integer
|
13
|
+
# @rbs filename: String
|
9
14
|
def initialize(output_dir:, interval:, filename: nil)
|
10
15
|
@output_dir = output_dir
|
11
16
|
@interval = interval
|
@@ -1,9 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# rbs_inline: enabled
|
4
|
+
|
3
5
|
class LeakProfiler
|
4
6
|
class MemoryUsage
|
5
7
|
attr_reader :thread
|
6
8
|
|
9
|
+
# @rbs output_dir: String
|
10
|
+
# @rbs interval: Integer
|
11
|
+
# @rbs filename: String
|
7
12
|
def initialize(output_dir:, interval:, filename: nil)
|
8
13
|
@output_dir = output_dir
|
9
14
|
@interval = interval
|
@@ -11,17 +16,13 @@ class LeakProfiler
|
|
11
16
|
end
|
12
17
|
|
13
18
|
def report
|
14
|
-
raise('Not supported Windows platform because this uses `ps` command for measurement.') if /mingw/.match?(RUBY_PLATFORM)
|
15
|
-
|
16
|
-
pid = Process.pid
|
17
|
-
|
18
19
|
@thread = Thread.start do
|
19
20
|
i = 0
|
20
21
|
File.open(File.expand_path(File.join(@output_dir, @filename)), 'w') do |f|
|
21
22
|
f.puts('elapsed [sec],memory usage (rss) [MB]')
|
22
23
|
|
23
24
|
loop do
|
24
|
-
rss =
|
25
|
+
rss = LeakProfiler::MemoryUsage.max_rss / 1024.0
|
25
26
|
f.puts("#{i},#{rss}")
|
26
27
|
f.fsync
|
27
28
|
i += @interval
|
data/lib/leak_profiler.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
# Generated from lib/leak_profiler/allocations.rb with RBS::Inline
|
2
|
+
|
3
|
+
class LeakProfiler
|
4
|
+
class Allocations
|
5
|
+
attr_reader thread: untyped
|
6
|
+
|
7
|
+
# @rbs logger: untyped
|
8
|
+
# @rbs interval: Integer
|
9
|
+
# @rbs max_allocations: Integer
|
10
|
+
# @rbs max_referrers: Integer
|
11
|
+
def initialize: (logger: untyped, interval: Integer, max_allocations: Integer, max_referrers: Integer) -> untyped
|
12
|
+
|
13
|
+
def report: () -> untyped
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def report_allocations: (untyped allocations) -> untyped
|
18
|
+
|
19
|
+
def report_referrer_objects: (untyped allocations) -> untyped
|
20
|
+
|
21
|
+
def detect_referrer_objects: (untyped object) -> untyped
|
22
|
+
|
23
|
+
def allocated_location: (untyped obj) -> untyped
|
24
|
+
|
25
|
+
def sort: (untyped allocations) -> untyped
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Generated from lib/leak_profiler/memory_memsize.rb with RBS::Inline
|
2
|
+
|
3
|
+
class LeakProfiler
|
4
|
+
class MemoryMemsize
|
5
|
+
attr_reader thread: untyped
|
6
|
+
|
7
|
+
# @rbs output_dir: String
|
8
|
+
# @rbs interval: Integer
|
9
|
+
# @rbs filename: String
|
10
|
+
def initialize: (output_dir: String, interval: Integer, ?filename: String) -> untyped
|
11
|
+
|
12
|
+
def report: () -> untyped
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Generated from lib/leak_profiler/memory_usage.rb with RBS::Inline
|
2
|
+
|
3
|
+
class LeakProfiler
|
4
|
+
class MemoryUsage
|
5
|
+
attr_reader thread: untyped
|
6
|
+
|
7
|
+
# @rbs output_dir: String
|
8
|
+
# @rbs interval: Integer
|
9
|
+
# @rbs filename: String
|
10
|
+
def initialize: (output_dir: String, interval: Integer, ?filename: String) -> untyped
|
11
|
+
|
12
|
+
def report: () -> untyped
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: leak_profiler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Watson
|
@@ -27,7 +27,8 @@ description: A simple profiler for Ruby to detect memory leak.
|
|
27
27
|
email:
|
28
28
|
- watson1978@gmail.com
|
29
29
|
executables: []
|
30
|
-
extensions:
|
30
|
+
extensions:
|
31
|
+
- ext/leak_profiler/extconf.rb
|
31
32
|
extra_rdoc_files: []
|
32
33
|
files:
|
33
34
|
- ".rubocop.yml"
|
@@ -35,13 +36,20 @@ files:
|
|
35
36
|
- LICENSE
|
36
37
|
- README.md
|
37
38
|
- Rakefile
|
39
|
+
- ext/leak_profiler/extconf.rb
|
40
|
+
- ext/leak_profiler/leak_profiler.c
|
38
41
|
- lib/leak_profiler.rb
|
39
42
|
- lib/leak_profiler/allocations.rb
|
40
43
|
- lib/leak_profiler/leak_profiler.rb
|
41
44
|
- lib/leak_profiler/memory_memsize.rb
|
42
45
|
- lib/leak_profiler/memory_usage.rb
|
46
|
+
- sig/generated/leak_profiler/allocations.rbs
|
43
47
|
- sig/generated/leak_profiler/leak_profiler.rbs
|
48
|
+
- sig/generated/leak_profiler/memory_memsize.rbs
|
49
|
+
- sig/generated/leak_profiler/memory_usage.rbs
|
50
|
+
- sig/leak_profiler.rbs
|
44
51
|
- test/test_leak_profiler.rb
|
52
|
+
- test/test_memory_usage.rb
|
45
53
|
homepage: https://github.com/Watson1978/leak_profiler
|
46
54
|
licenses:
|
47
55
|
- MIT
|