Skip to content
Guaranteed zombie passengers death.
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin more fixes
lib v0.4.0
spec fix travis
.travis.yml fix travis
Gemfile update
Gemfile.lock v0.4.0
Rakefile more fixes
zombie_passenger_killer.gemspec more fixes

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.


sudo gem install zombie_passenger_killer


zombie_passenger_killer [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/"
  process.daemonize = true

Monit script

check process zombie_killer
  with pidfile "/var/run/"
  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/'"
  stop program = "/bin/bash -c 'PIDF=/var/run/;/bin/kill `cat $PIDF` && rm -f $PIDF'"
  group zombie_killer

God script




Michael Grosser
License: MIT
Build Status

Something went wrong with that request. Please try again.