rmemlimit 0.1 → 0.2

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.
data/CHANGELOG CHANGED
@@ -1 +1,3 @@
1
+ v0.2. Changes to support forking
2
+
1
3
  v0.1. Proof of concept
data/Manifest CHANGED
@@ -1,6 +1,6 @@
1
1
  CHANGELOG
2
+ Manifest
2
3
  README.md
3
4
  Rakefile
4
5
  lib/rmemlimit.rb
5
6
  test/test_all.rb
6
- Manifest
data/README.md CHANGED
@@ -14,6 +14,8 @@ instead, in a background thread.
14
14
 
15
15
  gem 'rmemlimit' # in your Gemfile
16
16
 
17
+ Rmemlimit.setup # somewhere in app startup, or after forking
18
+
17
19
 
18
20
  #### Set a memory limit for GC (requires linux /proc)
19
21
 
@@ -35,3 +37,10 @@ kill itself when it passes a threshold, you can do limit to say 1000MB:
35
37
 
36
38
  (Or you can use the RUBY_KILL_MB environment variable)
37
39
 
40
+
41
+ #### Forking
42
+
43
+ When fork()ing in ruby 1.9, only the thread doing the fork keeps running in
44
+ the child. So you have to call Rmemlimit.setup in every child after
45
+ forking, or GC won't be running at all.
46
+
data/lib/rmemlimit.rb CHANGED
@@ -5,18 +5,20 @@ class Rmemlimit
5
5
  attr_accessor :gc_mb, :kill_mb
6
6
 
7
7
  def gcthread
8
- @gcthread ||= Thread.new do
9
- loop do
10
- mb = rss_mb
11
- if kill_mb && mb > kill_mb
12
- STDERR.puts "#{self}: Exceeded kill memory limit (#{mb} > #{kill_Mb} MB)"
13
- Process.kill(9, $$)
14
- elsif gc_mb && mb > gc_mb
15
- run_gc
16
- elsif mb == 0 || !gc_mb || !kill_mb
17
- run_gc
8
+ if !@gcthread || !@gcthread.alive?
9
+ @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
19
+ end
20
+ sleep 1
18
21
  end
19
- sleep 1
20
22
  end
21
23
  end
22
24
  end
@@ -51,5 +53,3 @@ class Rmemlimit
51
53
  end
52
54
 
53
55
  end
54
-
55
- Rmemlimit.setup
data/rmemlimit.gemspec CHANGED
@@ -2,15 +2,15 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rmemlimit"
5
- s.version = "0.1"
5
+ s.version = "0.2"
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 = "2012-12-28"
9
+ s.date = "2013-01-11"
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"]
13
- s.files = ["CHANGELOG", "README.md", "Rakefile", "lib/rmemlimit.rb", "test/test_all.rb", "Manifest", "rmemlimit.gemspec"]
13
+ s.files = ["CHANGELOG", "Manifest", "README.md", "Rakefile", "lib/rmemlimit.rb", "test/test_all.rb", "rmemlimit.gemspec"]
14
14
  s.homepage = "https://github.com/andys/rmemlimit"
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rmemlimit", "--main", "README.md"]
16
16
  s.require_paths = ["lib"]
data/test/test_all.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "#{File.dirname(__FILE__)}/../lib/rmemlimit"
2
+ Rmemlimit.setup
2
3
  require 'test/unit'
3
4
 
4
5
  class TestRmemlimit < Test::Unit::TestCase
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: rmemlimit
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: '0.1'
5
+ version: '0.2'
6
6
  platform: ruby
7
7
  authors:
8
8
  - Andrew Snow
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-28 00:00:00.000000000 Z
12
+ date: 2013-01-11 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Slow down garbage collector & limit ruby process memory
15
15
  email: andrew@modulus.org
@@ -21,11 +21,11 @@ extra_rdoc_files:
21
21
  - lib/rmemlimit.rb
22
22
  files:
23
23
  - CHANGELOG
24
+ - Manifest
24
25
  - README.md
25
26
  - Rakefile
26
27
  - lib/rmemlimit.rb
27
28
  - test/test_all.rb
28
- - Manifest
29
29
  - rmemlimit.gemspec
30
30
  homepage: https://github.com/andys/rmemlimit
31
31
  licenses: []