Passengerでゾンビプロセスを殺す時のベストプラクティス
Passenger EnterpriseでRollingRestartを有効にしているとworkerプロセスがゾンビになって再起動してもプロセスが死なない時がある。
下記のケースではPID24388がtmp/restart.txtをtouchしても死なない状況である。
$ passenger-status Requests in queue: 0 * PID: 24388 Sessions: 1 Processed: 9691 Uptime: 10h 36m 45s CPU: 3% Memory : 104M Last used: 2s ago * PID: 14112 Sessions: 0 Processed: 1148 Uptime: 1h 17m 31s CPU: 3% Memory : 57M Last used: 1m 0s ag * PID: 14121 Sessions: 0 Processed: 1327 Uptime: 1h 17m 30s CPU: 4% Memory : 57M Last used: 1m 4s ag * PID: 14136 Sessions: 0 Processed: 1175 Uptime: 1h 17m 27s CPU: 3% Memory : 54M Last used: 3s ago * PID: 14159 Sessions: 0 Processed: 1219 Uptime: 1h 17m 23s CPU: 3% Memory : 54M Last used: 58s ago * PID: 14185 Sessions: 0 Processed: 945 Uptime: 1h 17m 20s CPU: 2% Memory : 53M Last used: 5s ago
こういう場合まず最初に思いつくのがkillコマンドを使う事だがその場合運悪くそのプロセスと通信していたクライアントにはエラーを返してしまう。Passenger-4.0.37以上のバージョンを使っているならpassenger-config detach-processコマンドが使えるのでこちらを使うべきだ。
Phusion Passenger 4.0.37 released – Phusion Corporate BlogPhusion Corporate Blog
$ passenger-config detach-process 24388 Process 24388 detached.
問題なくゾンビプロセスは消えてなくなります。
$ passenger-status Requests in queue: 0 * PID: 14112 Sessions: 0 Processed: 1148 Uptime: 1h 17m 33s CPU: 3% Memory : 57M Last used: 1m 0s ag * PID: 14121 Sessions: 0 Processed: 1327 Uptime: 1h 17m 32s CPU: 4% Memory : 57M Last used: 1m 4s ag * PID: 14136 Sessions: 0 Processed: 1175 Uptime: 1h 17m 29s CPU: 3% Memory : 54M Last used: 3s ago * PID: 14159 Sessions: 0 Processed: 1219 Uptime: 1h 17m 25s CPU: 3% Memory : 54M Last used: 58s ago * PID: 14185 Sessions: 0 Processed: 945 Uptime: 1h 17m 22s CPU: 2% Memory : 53M Last used: 5s ago