3 # You may specify the path to the FastCGI crash log (a log of unhandled
 
   4 # exceptions which forced the FastCGI instance to exit, great for debugging)
 
   5 # and the number of requests to process before running garbage collection.
 
   7 # By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
 
   8 # and the GC period is nil (turned off).  A reasonable number of requests
 
   9 # could range from 10-100 depending on the memory footprint of your app.
 
  12 #   # Default log path, normal GC behavior.
 
  13 #   RailsFCGIHandler.process!
 
  15 #   # Default log path, 50 requests between GC.
 
  16 #   RailsFCGIHandler.process! nil, 50
 
  18 #   # Custom log path, normal GC behavior.
 
  19 #   RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
 
  21 require File.dirname(__FILE__) + "/../config/environment"
 
  22 require 'fcgi_handler'
 
  24 class OpenStreetMapFCGIHandler < RailsFCGIHandler
 
  26   def process_request(cgi)
 
  27     # Call superclass to process the request
 
  30     # Restart if we've hit our memory limit
 
  31     if resident_size > 512
 
  32       dispatcher_log :info, "restarting due to memory limit"
 
  38     # Read statm to get process sizes. Format is
 
  39     #   Size RSS Shared Text Lib Data
 
  40     fields = File.open("/proc/self/statm") do |file|
 
  41       fields = file.gets.split(" ")
 
  44     # Return resident size in megabytes
 
  45     return fields[1].to_i / 256
 
  49 OpenStreetMapFCGIHandler.process!