Don't put MemoryLimit class in the OSM module as it breaks autoloading

This commit is contained in:
Tom Hughes 2010-07-19 18:15:40 +01:00
parent 5e2b8d087c
commit 723cb57e6d

View file

@ -7,38 +7,36 @@ end
# configured then setup some rack middleware to police the limit # configured then setup some rack middleware to police the limit
if APP_CONFIG.include?('soft_memory_limit') and defined?(PhusionPassenger) if APP_CONFIG.include?('soft_memory_limit') and defined?(PhusionPassenger)
# Define some rack middleware to police the soft memory limit # Define some rack middleware to police the soft memory limit
module OSM class MemoryLimit
class MemoryLimit def initialize(app)
def initialize(app) @app = 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 > APP_CONFIG['soft_memory_limit']
Process.kill("USR1", 0)
end end
def call(env) # Return the result of this request
# Process this requst [status, headers, body]
status, headers, body = @app.call(env) end
private
# Restart if we've hit our memory limit def resident_size
if resident_size > APP_CONFIG['soft_memory_limit'] # Read statm to get process sizes. Format is
Process.kill("USR1", 0) # Size RSS Shared Text Lib Data
end fields = File.open("/proc/self/statm") do |file|
fields = file.gets.split(" ")
# Return the result of this request
[status, headers, body]
end
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
end end
# Return resident size in megabytes
return fields[1].to_i / 256
end end
end end
# Install the memory limit checker # Install the memory limit checker
Rails.configuration.middleware.use OSM::MemoryLimit Rails.configuration.middleware.use MemoryLimit
end end