![Zombies on a train](http://dl.dropbox.com/u/2670385/Web/zombie.jpeg)
Guaranteed zombie passengers death.
- passenger process no longer listed in passenger-status ? => Death
- high CPU load over long period (Optional) ? => Death
strace of killed zombies is printed, so debugging is easier.
(god/bluepill are not suited to monitor passenger apps because of ever-changing pids)
Add passenger-status to `/etc/sudoers` or run with sudo.
Install
=======
sudo gem install zombie_passenger_killer
Usage
=====
zombie_passenger_killer [options]
Options:
-m, --max [SIZE] Max high CPU entries in history before killing (default: off)
--history [SIZE] History size (default: 5)
-c, --cpu [PERCENT] Mark as high CPU when above PERCENT (default: 70)
-g, --grace [SECONDS] Wait SECONDS before hard-killing (-9) a process (default: 5)
-i, --interval [SECONDS] Check every SECONDS (default: 10)
-p, --pattern [PATTERN] Find processes with this pattern (default: ' Rack: ')
-r, --rvm-sudo Use `rvmsudo` to see passenger-status
-h, --help Show this
-v, --version Show Version
-t, --time Show time in output
### Bluepill script
app.process("zombie_passenger_killer") do |process|
process.start_command = "zombie_passenger_killer --max 5 --history 10 --cpu 30 --interval 10"
process.stdout = process.stderr = "/var/log/autorotate/zombie_passenger_killer.log"
process.pid_file = "/var/run/zombie_passenger_killer.pid"
process.daemonize = true
end
### Monit script
check process zombie_killer
with pidfile "/var/run/zombie_passenger_killer.pid"
start program = "/bin/bash -c 'export PATH=$PATH:/usr/local/bin HOME=/home;zombie_passenger_killer --max 5 --history 10 --cpu 30 --interval 10 &>/var/log/zombie_passenger_killer.log & &>/dev/null;echo $! > /var/run/zombie_passenger_killer.pid'"
stop program = "/bin/bash -c 'PIDF=/var/run/zombie_passenger_killer.pid;/bin/kill `cat $PIDF` && rm -f $PIDF'"
group zombie_killer
### God script
# TODO
Author
======
###Contributors
- [Roman Heinrich](https://github.com/mindreframer)
- [Kevin Mullin](https://github.com/kmullin)
[Michael Grosser](http://grosser.it)
michael@grosser.it
Hereby placed under public domain, do what you want, just do not hold me accountable...