NGINX/php-fpm環境で出る自己防衛機能
この前NGINX上で作業していて、いろいろphpを動かしていた。
と、突然Webサーバにアクセスできなくなった。
これはやばいなと、でログを確認。
2016/04/27 13:05:09 [crit] 13600#0: *2101 connect() to unix:/var/run/php-fpm/php-fpm.sock failed (13: Permission denied) while connecting to upstream, client: hogehoge, server: www.hogehoge.hoge, request: "POST /xmlrpc.php HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "hogehoge"
こんな感じのエラーを大量に吐き出していた。あれーpermissionは適切なんだけど・・
でphp-fpmのログへ。
[27-Apr-2016 13:05:22] WARNING: [pool www] server reached pm.max_children setting (15), consider raising it
気づくとpermissionが変わっていた。
srw-rw---- 1 nobody nobody 0 4月 27 12:54 2016 php-fpm.sock
php-fpmはnginxがオーナーなんだが。nobodyはphp-fpmのwww.confでコメントアウトしてある。とりあえずオーナーをnginxに変更。php-fpmとnginxをリスタート、ことなきを得ました。
pm.max_childrenが最大値になり、何かの閾値が上がると、サーバのメモリリークを防ぐためオーナーを書き換えて自分が落ちるという、防衛機能なのか?と思いました。
サーバ自体は再起動せずに済んでいます。
原因はわからないけど、Crystalwomanさんの以下のブログが参考になりそうです。
自分のサーバでも早速確認。
780 php-fpm:
62408 php-fpm:
62292 php-fpm:
49320 php-fpm:
62456 php-fpm:
62656 php-fpm:
64752 php-fpm:
62564 php-fpm:
62568 php-fpm:
62784 php-fpm:
62572 php-fpm:
61484 php-fpm:
59804 php-fpm:
60916 php-fpm:
62320 php-fpm:
61592 php-fpm:
確保されているメモリの模様。余計なことはできないってことか。