Revisions
-
jsierles2 revised this gist
Nov 28, 2008 . 1 changed file with 2 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -6,7 +6,7 @@ # required for passenger since cron has no environment ENV['HTTPD'] = 'httpd' MEM_LIMIT = ARGV[0] || 500 module Process def self.running?(pid) @@ -23,7 +23,7 @@ def self.running?(pid) parts = line.split pid, private_dirty_rss = parts[0].to_i, parts[4].to_f if private_dirty_rss > MEM_LIMIT.to_i puts "Found bloater #{pid} with size #{private_dirty_rss.to_s}" puts "Killing with SIGUSR1 (graceful)..." Process.kill("SIGUSR1", pid) -
jsierles revised this gist
Nov 28, 2008 . 1 changed file with 3 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -3,6 +3,9 @@ # Find bloating passengers and kill them gracefully. Run from cron every minute. # # required for passenger since cron has no environment ENV['HTTPD'] = 'httpd' MEM_LIMIT = ARGV[0].to_i || 500 module Process -
jsierles created this gist
Nov 27, 2008 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,37 @@ #!/usr/bin/env ruby # # Find bloating passengers and kill them gracefully. Run from cron every minute. # MEM_LIMIT = ARGV[0].to_i || 500 module Process def self.running?(pid) begin return Process.getpgid(pid) != -1 rescue Errno::ESRCH return false end end end `passenger-memory-stats`.each_line do |line| if line =~ /Rails: / parts = line.split pid, private_dirty_rss = parts[0].to_i, parts[4].to_f if private_dirty_rss > MEM_LIMIT puts "Found bloater #{pid} with size #{private_dirty_rss.to_s}" puts "Killing with SIGUSR1 (graceful)..." Process.kill("SIGUSR1", pid) puts "Finished kill attempt. Sleeping for 8 seconds..." sleep 8 if Process.running?(pid) puts "Process is still running, so killing with extreme predjudice!" Process.kill("TERM", pid) end puts "Done!" end end end