このすみノート

Webエンジニアが技術や趣味を書くブログです。

Apache + mod_php環境でgrpcを使うと、なぜかゾンビプロセスが発生するのでkillしている

Apache + mod_php環境でgrpcを使っていると、なぜかゾンビプロセスが発生しました。

qiita.com

通常、Apacheの子プロセスは親プロセスがppidになるはずですが、それが外れた状態で生き残り続けてしまうようです。 なのですが、私には原因がさっぱりわからないので、現状はcronでゾンビを定期的に殺しています。

ゾンビを殺すコマンドの一例

pidファイルの場所はそれぞれだったり、プロセス名がapache2なのかhttpdなのかは環境依存があると思いますが、ざっくりのコマンドイメージです。

HTTPD=`cat /run/apache2/apache2.pid`; ps --ppid 1 | grep apache2 | grep -v $HTTPD | awk '{ print $1 }' | xargs kill -9 > /dev/null 2>&1

1をppidに持ってて良いApacheの親プロセス (rootプロセス) は除外し、それ以外で1がppidになってしまっているApacheのプロセスをkillしています。

 あとがき

Nginx + php_fpm環境では今のところ発生してないため、grpc使うならphp_fpmがオススメというのが個人的な見解です。