]> git.openstreetmap.org Git - rails.git/blobdiff - config/initializers/memory_limits.rb
Avoid relying on the order in which emails are sent
[rails.git] / config / initializers / memory_limits.rb
index d3bd7a16b27627539a11a6253bf1073e82e6f98e..b58c1f28ed59346038b18bc1dee2f42909d6e84d 100644 (file)
@@ -1,39 +1,39 @@
 # Setup any specified hard limit on the virtual size of the process
-if defined?(HARD_MEMORY_LIMIT) and Process.const_defined?(:RLIMIT_AS)
-  Process.setrlimit Process::RLIMIT_AS, HARD_MEMORY_LIMIT*1024*1024, Process::RLIM_INFINITY
+if defined?(HARD_MEMORY_LIMIT) && defined?(PhusionPassenger) && Process.const_defined?(:RLIMIT_AS)
+  Process.setrlimit Process::RLIMIT_AS, HARD_MEMORY_LIMIT * 1024 * 1024, Process::RLIM_INFINITY
 end
 
 # If we're running under passenger and a soft memory limit is
 # configured then setup some rack middleware to police the limit
-if defined?(SOFT_MEMORY_LIMIT) and defined?(PhusionPassenger)
+if defined?(SOFT_MEMORY_LIMIT) && defined?(PhusionPassenger)
   # Define some rack middleware to police the soft memory limit
   class MemoryLimit
     def initialize(app)
       @app = app
     end
-    
+
     def call(env)
       # Process this requst
       status, headers, body = @app.call(env)
-      
+
       # Restart if we've hit our memory limit
-      if resident_size > SOFT_MEMORY_LIMIT
-        Process.kill("USR1", Process.pid)
-      end
-      
+      Process.kill("USR1", Process.pid) if resident_size > SOFT_MEMORY_LIMIT
+
       # Return the result of this request
       [status, headers, body]
     end
-  private
+
+    private
+
     def resident_size
       # Read statm to get process sizes. Format is
       #   Size RSS Shared Text Lib Data
       fields = File.open("/proc/self/statm") do |file|
         fields = file.gets.split(" ")
       end
-      
+
       # Return resident size in megabytes
-      return fields[1].to_i / 256
+      fields[1].to_i / 256
     end
   end