経営とか個人の雑記

弱小経営者頑張るが悩みを書いておく日記

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さんの以下のブログが参考になりそうです。

www.crystalsnowman.com

 

自分のサーバでも早速確認。

 

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:

 

確保されているメモリの模様。余計なことはできないってことか。