Guaranteed zombie passengers death.
Ruby
Latest commit 9ad2a71 Dec 30, 2016 @grosser self host assets
Permalink
Failed to load latest commit information.
assets self host assets Dec 30, 2016
bin more fixes Dec 4, 2014
lib v0.4.0 Dec 6, 2014
spec fix travis Dec 4, 2014
.travis.yml fix travis Dec 4, 2014
Gemfile update Dec 4, 2014
Gemfile.lock v0.4.0 Dec 6, 2014
Rakefile more fixes Dec 4, 2014
Readme.md self host assets Dec 30, 2016
zombie_passenger_killer.gemspec more fixes Dec 4, 2014

Readme.md

Zombies on a train

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: ')
    -1, --once                       Check once and exit
    --rvmsudo                        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

Michael Grosser
michael@grosser.it
License: MIT
Build Status