rmemlimit 0.2 → 0.3
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 +15 -0
- data/CHANGELOG +2 -0
- data/lib/rmemlimit.rb +22 -20
- data/rmemlimit.gemspec +3 -12
- data/test/test_all.rb +6 -10
- metadata +5 -7
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MTIxNDQ2YTNjYjg5ODFiZjdmOTcyYmZmMmMwODg0ZjhiMTY1NmJlZA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
N2I5YmNkYThjZWE5MWE0MzdhYjQ1Yjc1NDE3NzgzZGM3ZjIxNmQ3OQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZTYwODA4M2Q3MTRjYTVmMDExZTVkN2U4ZTA0MzlmM2UxOTVlMDgxZTE1Yzdi
|
10
|
+
ZTVlZWE2NDRlOTNmZGQxMzg1YTNjOTlkZDk3MDYxN2UzZTZiNzEzNTk0ZTE0
|
11
|
+
ZjRkOTIxNTJkNzRjODJiOTMyMjk0NjllYTE1ZjZmM2YxOGIzNmI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YWQzMTRkNzU4N2IxZjg5YjBiYTkzNmI4MTAyM2QyNTI2NDczNTM0MTE2NDk0
|
14
|
+
NDc0NGY0ZDA2ZWM0MGNkZGEwMTJmZWFlMzA5NGUzYjY4ZTUwYWRjZDkwYmU5
|
15
|
+
NDMzNDM2Mzg2YmNlMjhiNmI4OTAxN2E3MGNhOGI2ZjJmMzY1OTQ=
|
data/CHANGELOG
CHANGED
data/lib/rmemlimit.rb
CHANGED
@@ -1,53 +1,55 @@
|
|
1
|
-
|
2
1
|
class Rmemlimit
|
3
2
|
|
4
3
|
class << self
|
5
|
-
attr_accessor :gc_mb, :kill_mb
|
6
|
-
|
4
|
+
attr_accessor :gc_mb, :kill_mb, :sleep_time
|
5
|
+
|
7
6
|
def gcthread
|
8
7
|
if !@gcthread || !@gcthread.alive?
|
9
8
|
@gcthread = Thread.new do
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
9
|
+
begin
|
10
|
+
loop do
|
11
|
+
mb = rss_mb
|
12
|
+
if kill_mb && mb > kill_mb
|
13
|
+
STDERR.puts "#{self}: Exceeded kill memory limit (#{mb} > #{kill_mb} MB)"
|
14
|
+
Process.kill(9, $$)
|
15
|
+
elsif gc_mb && mb > gc_mb
|
16
|
+
run_gc
|
17
|
+
end
|
18
|
+
sleep sleep_time
|
19
19
|
end
|
20
|
-
|
20
|
+
rescue
|
21
|
+
puts "Exception: #{$!.class} #{$!}"
|
21
22
|
end
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
25
|
-
|
26
|
+
|
26
27
|
def run_gc
|
27
28
|
GC.enable
|
28
29
|
GC.start
|
29
30
|
GC.disable
|
30
31
|
end
|
31
|
-
|
32
|
+
|
32
33
|
def pagesize
|
33
34
|
4096
|
34
35
|
end
|
35
|
-
|
36
|
+
|
36
37
|
def rss_mb
|
37
38
|
rss_kb >> 10
|
38
39
|
end
|
39
|
-
|
40
|
+
|
40
41
|
def rss_kb
|
41
42
|
pagesize * (File.read("/proc/#{$$}/statm").split(' ')[1].to_i rescue 0) >> 10
|
42
43
|
end
|
43
|
-
|
44
|
+
|
44
45
|
def setup
|
46
|
+
self.sleep_time ||= 1
|
45
47
|
self.gc_mb = ENV['RUBY_GC_MB'].to_i if ENV['RUBY_GC_MB']
|
46
48
|
if ENV['RUBY_KILL_MB']
|
47
|
-
self.kill_mb = ENV['RUBY_KILL_MB'].to_i
|
49
|
+
self.kill_mb = ENV['RUBY_KILL_MB'].to_i
|
48
50
|
self.kill_mb = nil unless Rmemlimit.kill_mb > 1
|
49
51
|
end
|
50
|
-
GC.disable
|
52
|
+
GC.disable if gc_mb
|
51
53
|
self.gcthread
|
52
54
|
end
|
53
55
|
end
|
data/rmemlimit.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "rmemlimit"
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.3"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Andrew Snow"]
|
9
|
-
s.date = "2013-
|
9
|
+
s.date = "2013-08-15"
|
10
10
|
s.description = "Slow down garbage collector & limit ruby process memory"
|
11
11
|
s.email = "andrew@modulus.org"
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "README.md", "lib/rmemlimit.rb"]
|
@@ -15,16 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rmemlimit", "--main", "README.md"]
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.rubyforge_project = "rmemlimit"
|
18
|
-
s.rubygems_version = "
|
18
|
+
s.rubygems_version = "2.0.3"
|
19
19
|
s.summary = "Slow down garbage collector & limit ruby process memory"
|
20
20
|
s.test_files = ["test/test_all.rb"]
|
21
|
-
|
22
|
-
if s.respond_to? :specification_version then
|
23
|
-
s.specification_version = 3
|
24
|
-
|
25
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
26
|
-
else
|
27
|
-
end
|
28
|
-
else
|
29
|
-
end
|
30
21
|
end
|
data/test/test_all.rb
CHANGED
@@ -5,6 +5,7 @@ require 'test/unit'
|
|
5
5
|
class TestRmemlimit < Test::Unit::TestCase
|
6
6
|
|
7
7
|
def test_rss_kb
|
8
|
+
Rmemlimit.run_gc
|
8
9
|
kb = Rmemlimit.rss_kb
|
9
10
|
assert(kb > 0)
|
10
11
|
|
@@ -12,18 +13,13 @@ class TestRmemlimit < Test::Unit::TestCase
|
|
12
13
|
File.read("/proc/#{$$}/status").lines.grep(/VmRSS/).first
|
13
14
|
end
|
14
15
|
|
15
|
-
def test_run_gc
|
16
|
-
gccount = GC.stat[:count] + 1
|
17
|
-
sleep 1.1
|
18
|
-
assert_equal gccount, GC.stat[:count]
|
19
|
-
end
|
20
|
-
|
21
16
|
def test_gc_mb
|
22
17
|
Rmemlimit.gc_mb = Rmemlimit.rss_mb
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
18
|
+
Rmemlimit.sleep_time = 0.5
|
19
|
+
gccount = GC.stat[:count]
|
20
|
+
flibble = 'x' * 100000000
|
21
|
+
sleep 0.6
|
22
|
+
assert_equal gccount + 1, GC.stat[:count]
|
27
23
|
end
|
28
24
|
|
29
25
|
end
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rmemlimit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: '0.2'
|
4
|
+
version: '0.3'
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Andrew Snow
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-08-15 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: Slow down garbage collector & limit ruby process memory
|
15
14
|
email: andrew@modulus.org
|
@@ -29,6 +28,7 @@ files:
|
|
29
28
|
- rmemlimit.gemspec
|
30
29
|
homepage: https://github.com/andys/rmemlimit
|
31
30
|
licenses: []
|
31
|
+
metadata: {}
|
32
32
|
post_install_message:
|
33
33
|
rdoc_options:
|
34
34
|
- --line-numbers
|
@@ -44,18 +44,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
44
44
|
- - ! '>='
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
|
-
none: false
|
48
47
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
48
|
requirements:
|
50
49
|
- - ! '>='
|
51
50
|
- !ruby/object:Gem::Version
|
52
51
|
version: '1.2'
|
53
|
-
none: false
|
54
52
|
requirements: []
|
55
53
|
rubyforge_project: rmemlimit
|
56
|
-
rubygems_version:
|
54
|
+
rubygems_version: 2.0.3
|
57
55
|
signing_key:
|
58
|
-
specification_version:
|
56
|
+
specification_version: 4
|
59
57
|
summary: Slow down garbage collector & limit ruby process memory
|
60
58
|
test_files:
|
61
59
|
- test/test_all.rb
|