php-fpm構成

9487 ワード

php-fpmはFastCGIの実装であり,プロセス管理の機能を提供する.プロセスにはmasterプロセスとworkerプロセスの2つのプロセスが含まれます.マスタープロセスは1つしかありません.ポートの傍受を担当し、Webサーバからの要求を受信します.workerプロセスは一般的に複数あります(具体的な数は実際の必要に応じて構成されます).各プロセスの内部にはPHP解釈器が埋め込まれており、PHPコードが本当に実行される場所です.
ではphp-fpmはいくつのプロセスを開始しますか?プロセス数が多ければ多いほどいいのではないでしょうか?これはビジネスの実情に合わせて構成する必要があります.
自分の環境を例にとるとphp-fpmのプロファイルは2つあり、それぞれPHPインストールディレクトリの下の/etc/php-fpmである.confおよび/etc/php-fpm.d/www.conf
php-fpm.confの主な構成項目:pid = run/php-fpm.pid  #pid 。 error_log = log/php-fpm.log  # 。 log_level = notice  # 。 php-fpm.log 。 :alert( ),error( ),warning( ),notice( ),debug( )。 :notice、 emergency_restart_threshold = 0 emergency_restart_interval = 0  # 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  # php-fom。 yes。
www.confの主な構成項目:
user = www
group=www#プロセスを開始するユーザとユーザグループ、FPMプロセスが実行するUnixユーザは、設定する必要があります.ユーザグループは、設定されていない場合、デフォルトのユーザのグループで使用されます.
listen = 127.0.0.1:9002#fpmリスニングポート、すなわちnginxでphp処理されるアドレスは、一般的にデフォルト値でよい.使用可能なフォーマットは、「ip:port」、「port」、「/path/to/unix/socket」です.各プロセスプールは設定する必要があります.nginxとphpが異なるマシン上で分散処理されている場合はipをここに設定すればよい.
listen.owner = www
listen.group = www
listen.mode=0666#unix socketオプションを設定し、tcp方式でアクセスする場合は、ここでコメントします.
listen.allowed_clients = 127.0.0.1#FastCGIプロセスへのアクセスを許可するIPホワイトリストは、anyをIPに制限しないように設定し、他のホストのnginxを設定してもこのFPMプロセスにアクセスできるようにするには、listenでコストでアクセス可能なIPを設定します.各アドレスはカンマで区切られています.設定されていないか、空の場合は、サーバが接続を要求できます.
pm=dynamic#php-fpmプロセス起動モードで、pmはstaticおよびdynamicおよびondemandに設定できます.
pm.max_children=5#サブプロセスの最大数.
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#各サブプロセスが再生する前のサービスのリクエスト数を設定します.メモリ漏洩の可能性があるサードパーティ製モジュールにとって非常に役立ちます.
pm.status_path=/status#fpmステータスページのURL.設定されていない場合は、ステータスページにアクセスできません.
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=10 s#設定を要求するタイムアウト時間が経過すると、対応するPHP呼び出しスタック情報がスローログに完全に書き込まれる.「0」に設定して「Off」を表します.
request_terminate_timeout=0#単一リクエストのタイムアウト中止時間を設定.このオプションはphp.ini設定の'max_execution_time'は、特定の理由で実行を中止するスクリプトがありません.
php-fpm構成最適化
この部分は豆弁を回すhttps://www.douban.com/note/315222037/
背景は最近Wordpressをアリクラウドに移行しました.自分のサーバーはクラウドサーバーで、ハードディスクとメモリはすべて比較的に小さいため、メモリはいつも足りないで、Linuxコマンドを通じて見た後に、php-fpmプロセスを起動する数が20余りあることを発見して、1 G近くのメモリを占有して、全体のサーバーはやっと1.5 Gのメモリで、最後にphp-fpmプロセス数の最適化を通じてこの問題を解決して、サーバーは多く600 Mのメモリを節約して、php-fpmの最適化方法を皆さんと共有します.備考:現在nginx、fpm-phpに基づいてメモリ最適化が行われており、詳細は関連資料php-fpm最適化を参照
1、php-fpm最適化パラメータ紹介彼らはそれぞれ:pm、pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers. pm:そのような方法を使用すると、static(静的)またはdynamic(動的)の2つの値が選択できることを示します.より古いバージョンではdynamicはapache-likeと呼ばれています.これはプロファイルの説明を参照してください.以下の4つのパラメータの意味はそれぞれ:pm.max_children:静的に開くphp-fpmプロセス数pm.start_servers:ダイナミック方式での開始php-fpmプロセス数pm.min_spare_servers:動的方式における最小php-fpmプロセス数pm.max_spare_servers:ダイナミック方式での最大php-fpmプロセス数の違い:dmがstaticに設定されている場合、実際にはpmのみである.max_childrenというパラメータが有効になります.設定数のphp-fpmプロセスが開きます.dmがdynamicに設定場合pm.max_childrenパラメータが無効になり、後の3つのパラメータが有効になります.php-fpmの運転開始時にpmが起動する.start_servers個のphp-fpmプロセスは、その後、システムの需要に応じてpmで動的に行われる.min_spare_serversとpm.max_spare_servers間でphp-fpmプロセス数2を調整し、サーバの具体的な構成は私たちのサーバに対して、どの実行方式を選択すればいいですか?実際、Apacheと同様に、実行されているPHPプログラムは、実行が完了すると、メモリ漏洩の問題が多かれ少なかれ発生します.これも、php-fpmプロセスが1つのphp-fpmプロセスで3 M程度のメモリしか消費されず、しばらく実行すると20-30 Mに上昇する理由です.メモリの大きいサーバ(例えば8 G以上)の場合、静的max_を指定します.childrenは、追加のプロセス数の制御を必要とせず、効率を向上させるため、実際にはより適切である.頻繁にphp-fpmをスイッチするプロセスもヒステリシスがあるため、メモリが十分に大きい場合は静的にすると効果的です.数量もメモリ/30 Mによって得ることができて、例えば8 GBのメモリは100に設定することができて、php-fpmの消費するメモリは2 G-3 Gの様子に制御することができます.メモリが1 Gなど少し小さい場合、静的なプロセスの数を指定すると、サーバの安定性が向上します.これによりphp-fpmは十分なメモリしか取得できず、少ないメモリを他のアプリケーションに割り当てて使用することができ、システムの動作をよりスムーズにすることができます.小さなメモリのサーバにとって、例えば256 MメモリのVPSは、1つの20 Mのメモリ量で計算しても、10個のphp-cgiプロセスで200 Mメモリが消費され、システムのクラッシュは正常であるはずです.そのため、php-fpmプロセスの数をできるだけ制御し、他のアプリケーションが消費するメモリをほぼ明確にした後、静的な数を指定すると、システムがより安定します.あるいはダイナミック方式を使用すると、ダイナミック方式は余分なプロセスを終了し、メモリを回収して解放することができるので、メモリの少ないサーバやVPSで使用することをお勧めします.具体的な最大数はメモリ/20 Mによって得られる.例えば512 MのVPSはpmを提案する.max_spare_serversは20に設定されています.pmについてはmin_spare_serversでは、サーバ上にphp環境を配置するだけであれば、5~10の間で適切な値を設定することをお勧めします.本サーバ構成1、サーバ基本情報:ハードディスク:データディスク30 G、システムディスク20 Gメモリ:1.5 G CPU:デュアルコアシステム:CentOS 6.3 64ビット帯域幅:2 M 2独占、導入アプリケーションGit、SVN、Apache、Tomcat、PHP、Nginx、Mysql、JDK 3、最適化パラメータpm=dynamic pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 8
 
php-fpmステータスページおよびステータス詳細を開く
www.confプロファイルを編集してpmを見つけます.status_path構成項目、コメント解除、php-fpmの再ロード
pm.status_path = /phpfpm_status

nginxでconfは次のlocationモジュールに追加し、nginx構成を再ロードします.
server {
    location /phpfpm_status {
        fastcgi_pass  127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    }
}

statusページを開くと、次の情報が表示されます.
pool:                 www
process manager:      dynamic
start time:           23/Apr/2019:15:38:06 +0800
start since:          7598
accepted conn:        5
listen queue:         0
max listen queue:     0
listen queue len:     128
idle processes:       1
active processes:     1
total processes:      2
max active processes: 1
max children reached: 0
slow requests:        0

status情報の詳細
pool 			– fpm    ,    www
process manager 	–       , :static, dynamic or ondemand. dynamic
start time 		–     ,  reload php-fpm,     
start since 		–     
accepted conn 		–           
listen queue 		–       ,       0,     pphp-fpm     
max listen queue 	–            
listen queue len 	– socket      
idle processes 		–       
active processes 	–       
total processes 	–      
max active processes 	–          (FPM     )
max children reached 	-            ,        0,              ,     。
slow requests 		–    php-fpm slow-log,       

 
statusステータスページの表示効果は、json、xml、html、fullの4種類があり、GETパラメータで異なる効果を表示できます.
1、json形式
http://あなたのドメイン名/phpfpm_にアクセスします.status?jsonは、次のようなjsonフォーマットを表示します.
{"pool":"www","process manager":"dynamic","start time":1556005086,"start since":6634,"accepted conn":2,"listen queue":0,"max listen queue":0,"listen queue len":128,"idle processes":1,"active processes":1,"total processes":2,"max active processes":1,"max children reached":0,"slow requests":0}

2、xml形式
http://あなたのドメイン名/phpfpm_にアクセスします.status?xmlは、次のようなxml形式を表示します.
www
dynamic
1556005086
7353
3
0
0
128
1
1
2
1
0
0
3、html形式
http://あなたのドメイン名/phpfpm_にアクセスします.status?htmlでhtml形式を表示します.statusページのデフォルトはhtml形式を返します.
4、full形式
http://あなたのドメイン名/bcstatusにアクセスしますか?fullは、次のようなfull形式を表示します.
pool:                 www
process manager:      dynamic
start time:           23/Apr/2019:15:38:06 +0800
start since:          7558
accepted conn:        4
listen queue:         0
max listen queue:     0
listen queue len:     128
idle processes:       1
active processes:     1
total processes:      2
max active processes: 1
max children reached: 0
slow requests:        0

************************
pid:                  11990
state:                Running
start time:           23/Apr/2019:15:38:06 +0800
start since:          7558
requests:             2
request duration:     204
request method:       GET
request URI:          /phpfpm_status?full
content length:       0
user:                 -
script:               -
last request cpu:     0.00
last request memory:  0

************************
pid:                  11991
state:                Idle
start time:           23/Apr/2019:15:38:06 +0800
start since:          7558
requests:             2
request duration:     256
request method:       GET
request URI:          /phpfpm_status?xml
content length:       0
user:                 -
script:               -
last request cpu:     0.00
last request memory:  2097152

fullフォーマットパラメータの詳細
pid 			–   PID,    kill    .
state 			–         (Idle, Running, …)
start time 		–        
start since 		–         
requests 		–             
request duration 	–     (  )
request method 		–      (GET, POST, …)
request URI 		–   URI
content length 		–        (    POST)
user 			–    (PHP_AUTH_USER) (or ‘-’      )
script 			– PHP   (or ‘-’ if not set)
last request cpu 	–       CPU   。
last request memorythe  -           

urlリクエストにより現在時刻php-fpmのプロセス状態を取得し、タイミングタスクと組み合わせてステータスモニタリングを行い、取得したデータの「listen queue」パラメータによりリクエスト待ちキュー長を得ることができます.このパラメータは0でなければ、現在のプロセス数が使用済みであることを示し、新しいリクエストが来ると待機キューに入る必要があります.したがって、このパラメータにより、プロセス数を増やしたり、サーバ構成を強化したりする必要があるかどうかを判断できます.