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 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
@@ -1,3 +1,5 @@
1
+ v0.3. Only stop GC if gc_mb is set
2
+
1
3
  v0.2. Changes to support forking
2
4
 
3
5
  v0.1. Proof of concept
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
- 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
- elsif mb == 0 || !gc_mb || !kill_mb
18
- run_gc
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
- sleep 1
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.2"
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-01-11"
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 = "1.8.24"
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
- gccount = GC.stat[:count] + 1
24
- flibble = 'x' * 1024 * 1024
25
- sleep 1.1
26
- assert_equal gccount, GC.stat[:count]
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
- prerelease:
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-01-11 00:00:00.000000000 Z
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: 1.8.24
54
+ rubygems_version: 2.0.3
57
55
  signing_key:
58
- specification_version: 3
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