Apache + mod_php環境でgrpcを使っていると、なぜかゾンビプロセスが発生しました。
通常、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がオススメというのが個人的な見解です。