rmemlimit 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
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: []