PHP-FPMの設定を見直す
今までほぼデフォルトで運用してきましたが、WordPressで「予約投稿の失敗」と出るようになったのでついでに見直そうという趣旨です。
完成系の設定
/etc/php5/fpm/php-fpm.conf
[global]
pid = /var/run/php5-fpm.pid
error_log = /var/log/php5-fpm/error.log
include=/etc/php5/fpm/pool.d/*.conf
/etc/php5/fpm/pool.d/www.conf
[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = static
pm.max_children = 10
pm.max_requests = 100
slowlog = /var/log/php5-fpm/www-slow.log
request_slowlog_timeout = 5s
php_flag[display_errors] = off
;php_admin_value[memory_limit] = 32M
php_admin_value[error_log] = /var/log/php5-fpm/www-error.log
php_admin_flag[log_errors] = on
php_admin_value[upload_max_filesize] = 5M
php_admin_value[post_max_size] = 5M
php_admin_flag[expose_php] = off
あんまり変えるべき設定が無いですね。
接続数の設定
pm = static
pm.max_children = 10
pm.max_requests = 100
pm = static
にして、アクセス数の高低によらず接続数を10本固定にするようにしました。
dynamicにするとプロセスの生成/破棄でコストがかかるし、ピーク時などのリソース枯渇時に捌ける量が不安定になるので、こういう所は固定がいいのかなと思っています。
max_requests = 100
で、リクエスト100回毎にプロセスを再生成するようにしています。メモリリーク用の保険みたいな設定かな。
遅い処理をログ出力する
slowlog = /var/log/php5-fpm/www-slow.log
request_slowlog_timeout = 5s
これは見直し前から変更ないのですが、5秒以上かかる処理はwww-slow.log
に出力しています。あんまり見ることはないのですが。
画面にエラーを出さない
php_flag[display_errors] = off
処理中に500エラーが出た場合にスタックトレース画面を出さないようにする設定ですね。
しかし、WordPressではレンダリング中にエラーが出るとスタックトレースを出したりするので、そこの抑制は別設定ですね。
プロセスで使えるメモリ上限
;php_admin_value[memory_limit] = 32M
いずれ使うかもしれないけど、今は無効化。
500エラーが出た際にログ出力する
php_admin_value[error_log] = /var/log/php5-fpm/www-error.log
php_admin_flag[log_errors] = on
設定はしているけど、まだログが出たことがない。
送信時の上限
php_admin_value[upload_max_filesize] = 5M
php_admin_value[post_max_size] = 5M
嫌がらせででかいPOSTを投げたりされないようにですね。
レスポンスヘッダからX-Powered-By: PHP/x.x.xを消す
php_admin_flag[expose_php] = off
まあ、誇らしげにバージョンを明記する必要もないので。