anyway plus the run_gc! method in the fastcgi dispatcher is a disaster as it disables GC completely except for when it is forced by making a call to the run_gc! method.
49 lines
1.4 KiB
Ruby
Executable file
49 lines
1.4 KiB
Ruby
Executable file
#!/usr/bin/ruby1.8
|
|
#
|
|
# You may specify the path to the FastCGI crash log (a log of unhandled
|
|
# exceptions which forced the FastCGI instance to exit, great for debugging)
|
|
# and the number of requests to process before running garbage collection.
|
|
#
|
|
# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
|
|
# and the GC period is nil (turned off). A reasonable number of requests
|
|
# could range from 10-100 depending on the memory footprint of your app.
|
|
#
|
|
# Example:
|
|
# # Default log path, normal GC behavior.
|
|
# RailsFCGIHandler.process!
|
|
#
|
|
# # Default log path, 50 requests between GC.
|
|
# RailsFCGIHandler.process! nil, 50
|
|
#
|
|
# # Custom log path, normal GC behavior.
|
|
# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
|
|
#
|
|
require File.dirname(__FILE__) + "/../config/environment"
|
|
require 'fcgi_handler'
|
|
|
|
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!
|