Skip to content

Instantly share code, notes, and snippets.

@adz
Forked from ntalbott/memory_minder.rb
Created June 18, 2009 23:02
Show Gist options
  • Save adz/132266 to your computer and use it in GitHub Desktop.
Save adz/132266 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
command = '/usr/bin/passenger-memory-stats'
memory_limit = 200 # megabytes
def running?(pid)
begin
return Process.getpgid(pid) != -1
rescue Errno::ESRCH
return false
end
end
`#{command}`.each_line do |line|
next unless /(\d+)\s+\d+\s+(\d+\.\d+)\s+MB\s+(\d+\.\d+)\s+MB\s+Rails:/.match(line)
all, pid, vm_size, private = $~.to_a
if private.to_i > memory_limit
puts "#{Time.now}: Killing #{pid}, memory usage == #{private}"
Process.kill("SIGUSR1", pid.to_i)
puts "Finished kill attempt. Sleeping for 20 seconds..."
sleep 20
if running?(pid.to_i)
puts "Process is still running, sending term signal"
Process.kill("TERM", pid.to_i)
sleep 20
if running?(pid.to_i)
puts "Process is still running, sending kill signal"
Process.kill("KILL", pid.to_i)
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment