From 1bd37101347e59473b77d3a71fc4f35090db0dc5 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 26 Apr 2009 16:56:40 +0000 Subject: [PATCH] Increase the hard memory limit and set a lower soft limit that does a clean restart between requests. --- config/initializers/limits.rb | 4 ++-- public/dispatch.fcgi | 28 +++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/config/initializers/limits.rb b/config/initializers/limits.rb index 485d95e9c..1ce493dfb 100644 --- a/config/initializers/limits.rb +++ b/config/initializers/limits.rb @@ -1,6 +1,6 @@ -# Limit each rails process to a 512Mb resident set size if possible +# Set a hard limit of 1Gb on the virtual size of the process if Process.const_defined?(:RLIMIT_AS) - Process.setrlimit Process::RLIMIT_AS, 640*1024*1024, Process::RLIM_INFINITY + Process.setrlimit Process::RLIMIT_AS, 1024*1024*1024, Process::RLIM_INFINITY end # Force a restart after every 10000 requests diff --git a/public/dispatch.fcgi b/public/dispatch.fcgi index cd76b6113..af8434a76 100755 --- a/public/dispatch.fcgi +++ b/public/dispatch.fcgi @@ -21,4 +21,30 @@ require File.dirname(__FILE__) + "/../config/environment" require 'fcgi_handler' -RailsFCGIHandler.process! nil, 10 +class OpenStreetMapFCGIHandler < RailsFCGIHandler +protected + def process_request(cgi) + # Call superclass to process the request + super + + # Restart if we've hit our memory limit + if resident_size > 512 + dispatcher_log :info, "restarting due to memory limit" + restart! + end + end + + 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 + +OpenStreetMapFCGIHandler.process! nil, 10 -- 2.43.2