php-fpmの構成と最適化
33768 ワード
php-fpmの構成と最適化
私は前のいくつかの編でphp-fpmの様々な紹介とインストールについて詳しく述べました.今日は、そのプロファイル
php-fpmのインストールディレクトリ
以下は私の普段の環境でphpを構築する各種インストールディレクトリで、みんなの基本もあまり悪くありません.
centosなどのlinuxプラットフォーム
:https://zybuluo.com/phper/note/89081
私は前のいくつかの編でphp-fpmの様々な紹介とインストールについて詳しく述べました.今日は、そのプロファイル
php-fpm
のさまざまな構成と、一般的な最適化について見てみましょう.php-fpmのインストールディレクトリ
以下は私の普段の環境でphpを構築する各種インストールディレクトリで、みんなの基本もあまり悪くありません.
centosなどのlinuxプラットフォーム
/usr/local/php/php
/usr/local/php/etc/php.ini
/usr/local/php/sbin/php-fpm
/usr/local/php/etc/php-fpm.conf
mac平台
/usr/bin/php
/etc/php.ini
/usr/bin/php-fpm
/etc/php-fpm.conf
由于我开发以Mac为主,所以就用Mac的环境配置来学习。
php-fpm配置详解
这是搜索的一份还算算比较详细的
php-fpm.conf
配置详解,我会针对性的修改下,当然php手册上也有详细的讲解:http://php.net/manual/zh/install.fpm.configuration.php
pid = /usr/local/var/run/php-fpm.pid
#pid , , Mac 。 php var/run/php-fpm.pid。 centos : /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/var/log/php-fpm.log
# , Mac , php var/log/php-fpm.log, centos : /usr/local/php/var/log/php-fpm.log
log_level = notice
# . php-fpm.log 。 : alert( ), error( ), warning( ), notice( ), debug( ). : notice.
emergency_restart_threshold = 60
emergency_restart_interval = 60s
# emergency_restart_interval SIGSEGV SIGBUS php-cgi emergency_restart_threshold ,php-fpm 。 。0 ' '. : 0 ( ).
process_control_timeout = 0
# . : s( ), m( ), h( ), d( ) : s( ). : 0.
daemonize = yes
# fpm, yes, no。 FPM , 。 。
listen = 127.0.0.1:9000
#fpm , nginx php , 。 : 'ip:port', 'port', '/path/to/unix/socket'. 。 nginx php , , ip 。
listen.backlog = -1
#backlog , listen ,-1 , , 。backlog :http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1
# FastCGI IP , any IP, nginx FPM ,listen IP。 any。 . , 。
listen.owner = www
listen.group = www
listen.mode = 0666
#unix socket , tcp , 。
user = www
group = www
# ,FPM Unix , 。 , , 。
pm = dynamic
#php-fpm ,pm static dynamic ondemand
# static, , pm.max_children 。
# dynamic, , :
pm.max_children = 50 #
pm.start_servers = 2 # , : min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 1 # , ,
pm.max_spare_servers = 3 #, , ,
pm.max_requests = 500
# . . '0' . PHP_FCGI_MAX_REQUESTS . : 0.
pm.status_path = /status
#FPM . , . : none. munin
ping.path = /ping
#FPM ping . , ping . FPM . (/)。
ping.response = pong
# ping . HTTP 200 text/plain . : pong.
access.log = log/$pool.access.log
# , 。
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
# 。
slowlog = log/$pool.log.slow
# , request_slowlog_timeout ,
request_slowlog_timeout = 10s
# , PHP . '0' 'Off'
request_terminate_timeout = 0
# . php.ini 'max_execution_time' . '0' 'Off'. 502 。
rlimit_files = 1024
# rlimit . : 1024, ulimit -n ,ulimit -n 2048 。
rlimit_core = 0
# rlimit . : 'unlimited' 、0 . : .
chroot =
# Chroot . . , chroot .
chdir =
# , Chdir . . : , / (chroot )
catch_workers_output = yes
# stdout stderr . , stdout stderr FastCGI /dev/null . : .
, 。
php-fpm
。 fasgcgi ,php php-fpm , nginx , , ? ! 。
, ?
pm = static | dynamic | ondemand
pmはこのような3 に できますが、 たちが も く っているのは の2 です.
pm=staticモードpm = static
は、 したphp-fpmサブプロセスの が されていることを し、pm.max_children = 50
というパラメータのみが になります.php-fpmを すると、51(1つのプライマリ+50 のサブ)のプロセスをすべて し、 です.
pm=dynamicモードpm = dynamic
モードは、 プロセスが に り てられ、 とともに に することを す. はpm.max_children
,pm.start_servers
,pm.min_spare_servers
,pm.max_spare_servers
のいくつかのパラメータによって で される.
すでにお ししましたが、ここでもう しましょう.pm.max_children = 50
は、 なサブプロセスの です. する があります.ここでは、 50 のサブプロセスしかできないことを します.pm.start_servers = 20
php-fpmとともに したときに されるサブプロセスの .デフォルト:min_spare_servers + (max_spare_servers - min_spare_servers)/2.ここでは、 に すると20 のサブプロセスがあります.pm.min_spare_servers = 10
サーバアイドル のphp-fpmプロセスの を します. する があります. きがある は、10 であれば、いくつか して します.pm.max_spare_servers = 30
サーバアイドル の php-fpmプロセス を します. する があります. きがある は、プロセス が30 チェックされ、 じて30 の になります.
たしてstaticを んだのかdynamic?
くの が が ってきて、 を んだらいいか かりません.
な は:ダイナミックは さいメモリの に して、 にプロセスを して、メモリを します. は メモリマシンに しており、 プロセスを に することはサーバリソースにも されます.
メモリが きく、8-20 Gがある は、php-fpmプロセス20 Mで すると、100 で2 Gメモリになります.staticモードをオンにすることができます.もしあなたのメモリが さいならば、 えば256 Mで、それでは して して、あなたの の のその のプロセスもメモリを する があるので、dynamicに するのが も いです、 えば:pm.max_chindren=8で、メモリ160 M を し、いつでも することができ、アクセス の のサイトには です.
スロー・ログ・クエリー
たちは 500502の に まされることがあります.nginxが のエラーコードを すると、バックエンドphp−fpm phpに らかの が したと することができ、 えば、エラーを し、タイムアウトを する.
このとき、スローログ をオンにすることができます.slowlog = /usr/local/var/log/php-fpm.log.slow request_slowlog_timeout = 15s
を するタイムアウト が15 、 するPHP び しスタック がスローログに に き まれます.
php-fpmスローログには、プロセス 、スクリプト 、どのファイルのどの のコードのどの が すぎるかが されます.
[21-Nov-2013 14:30:38] [pool www] pid 11877
script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php
[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2
, 2 file_get_contents , 。