この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 11218|答える: 4

PHP-FPMパラメータ設定とチューニング

[リンクをコピー]
掲載地 2017/07/26 9:20:54 | | |
php-fpm.conf 重要なパラメータを詳細に説明します

PID = run/php-fpm.pid
#pid设置、インストールディレクトリでvar/run/php-fpm.pidを有効にすることが推奨されます

error_log = 対数/php-fpm.log
#错误日志、インストールディレクトリのデフォルトはvar/log/php-fpm.logです

log_level = 通知
#错误级别. 利用可能なレベルは、アラート、エラー、警告、通知、デバッグです。 デフォルト:通知。

emergency_restart_threshold = 60
emergency_restart_interval = 60秒台
#は、SIGSEGVまたはSIGBUSエラーを持つphp-cgiプロセスの数がemergency_restart_interval値内のemergency_restart_thresholdを超える場合、php-fpmが優雅に再起動されることを示します。 これら二つの選択肢は一般的にデフォルトとして残っています。

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. 利用可能な単位:s(秒)、m(分)、h(時間)、d(日) デフォルト単位:s(秒)。 デフォルト:0。

デーモナイズ = はい
#后台执行fpm、デフォルト値は「はい」で、デバッグしたい場合は「いいえ」に変更できます。 FPMでは、複数のプロセスプールを実行するために異なる設定を使用できます。 これらの設定は各プロセスプールごとに個別に設定可能です。

listen = 127.0.0.1:9000
#fpm监听端口、すなわちnginxでPHPで処理されるアドレスが一般的にデフォルトの値です。 利用可能なフォーマットは「ip:port」「port」「/path/to/unix/socket」です。 各プロセスプールを設定する必要があります。

listen.backlog = -1
#backlog数、-1は無制限を意味し、OSによって決まります。この行をコメントで削除してください。 参考文献:http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP、IPを制限しない設定をしてください。他のホストのnginxをこのFPMプロセスにアクセスさせたい場合は、リスニングコストでアクセス可能なIPアドレスを設定する必要があります。 デフォルト値は任意です。 各住所はコンマで区切られています。 設定されていないか空の場合は、どのサーバーでも接続を要求できます

listen.owner = www
listen.group = www
listen.mode = 0666
ソケット設定 #unix、もしTCPを使ってアクセスしているなら、こちらにコメントしてください。

ユーザー = www
グループ = www
#启动进程的帐户和组

pm = 動的 #对于专用服务器、PMは静的設定が可能です。
#如何控制子进程、選択肢は静的で動的です。 静的を選択する場合、pm.max_childrenによって固定数の子プロセスが指定されます。 ダイナミックを選択する場合、以下のパラメータで決まります。
pm.max_children #、子プロセスの最大数
pm.start_servers #、起動時のプロセス数
pm.min_spare_servers #、アイドルプロセスの最小数を保証し、アイドルプロセスがこの値より少ない場合は新しい子プロセスを作成します
pm.max_spare_servers#、アイドルプロセスの数を最大にしてください。アイドルプロセスがこの値より多ければ、クリーンになります

pm.max_requests = 1000
#设置每个子进程重生之前服务的请求数. これはメモリリークの可能性があるサードパーティ製モジュールに非常に役立ちます。 「0」に設定されている場合、リクエストは常に受け入れられます。 環境変数PHP_FCGI_MAX_REQUESTS相当です。 デフォルト:0。

pm.status_path = /status(ステータス)
#FPM状态页面的网址。 設定がなければステータスページにアクセスできません。 デフォルト:なし。 ムニンモニタリングが行われます

ping.path = /ping
#FPM监控页面的ping网址。 設定がなければ、pingページにアクセスできません。 このページは、FPMが生存しているか、リクエストに応答できるかを外部から検出するために使われます。 なお、スラッシュ(/)で始まらなければならないことに注意してください。

ping.response = ポン
#用于定义ping请求的返回相应。 HTTP 200のテキスト/プレーン形式のテキストを返します。 デフォルト:ポン。

request_terminate_timeout = 0
#设置单个请求的超时中止时间. このオプションは、設定の「max_execution_time」php.ini特別な理由で中止されていないスクリプトには役立つかもしれません。 「0」に設定すると「オフ」を意味します。502エラーが頻繁に発生した場合は、このオプションを変更してみてください。

request_slowlog_timeout = 10秒
#当一个请求该设置的超时时间后 対応するPHPコールスタック情報がスローログに書き込まれます。 「0」に設定すると「オフ」を意味します

Slowlog = log/$pool.log.slow
#慢请求的记录日志、request_slowlog_timeoutと一緒に使ってください

rlimit_files = 1024
#设置文件打开描述符的rlimit限制。 デフォルト値:デフォルトのオープンハンドルは1024で、ulimit -nで表示し、ulimit -n 2048で修正できます。

rlimit_core = 0
#设置核心rlimit最大限制值。 利用可能な値は「無制限」、0、または正の整数です。 デフォルト:システム定義値。

chroot =
#启动时的Chroot目录。 定義されたディレクトリは絶対パスである必要があります。 設定がなければ、chrootは使用されません。

chdir =
#设置启动目录、Chdirは起動時に自動的にそのディレクトリに送られます。 定義されたディレクトリは絶対パスである必要があります。 デフォルト:current directory、or/directory(chroot時)

catch_workers_output = はい
#重定向运行过程中的stdout和stderr到主要的错误日志文件中。 設定されていない場合、stdoutとstderrはFastCGIのルールに従って/dev/nullにリダイレクトされます。 デフォルト:Null。



PHP-FPMパラメータチューニング

pm = 動的; 使用されているプロセス数量管理方法を示します

動的とは、PHP-FPMプロセスの数が動的であり、その数は最初に指定pm.start_servers、リクエスト数が多ければ自動的に増加し、アイドルプロセスの数がpm.min_spare_servers以下にならないようにします。また、プロセス数が多い場合は、余剰プロセス数がpm.max_spare_serverを超えないように適切に整理されます

静的とは、php-fpmのプロセス数が静的であり、プロセス数は常にpm.max_childrenが指定した数であり、増加も減少もしないことを意味します

pm.max_children = 300; 静的モードで有効化されているphp-fpmプロセスの数
pm.start_servers = 20; 動的モードで起動するphp-fpmプロセスの数
pm.min_spare_servers = 5; 動的モードでの最小数のphp-fpmプロセス
pm.max spare_servers = 35; 動的モードでのphp-fpmプロセスの最大数

pmが静的であれば、パラメータpm.max_childrenのみが有効です。 システムは一定数のphp-fpmプロセスを開きます

もしPMが動的であれば、pm.max_childrenパラメータは無効となり、最後の3つのパラメータが適用されます。 システムはphp-fpm実行の開始時にphp-fpmプロセスをpm.start_servers開始し、システムのニーズに応じてpm.min_spare_serversとpm.max_spare_server間のphp-fpmプロセス数を動的に調整します

では、私たちのサーバーではどちらのPM方法を選ぶのが良いのでしょうか? 実際、ApacheのようにPHPプログラムを実行中に実行後にメモリリークの問題が起こることがあります。 そのため、php-fpmプロセスは最初に約300万のメモリしか占有せず、しばらく動かすと200〜3000万に増加します。

8G以上の大容量メモリを持つサーバーでは、追加のプロセス制御を必要とせず効率向上するため、静的max_childrenを指定する方が実際には適切です。 php-fpmプロセスの頻繁な切り替えも遅延が発生するため、メモリが十分に大きくなったときに静的効果をオンにする方が良いでしょう。 容量はメモリ/30M単位で取得することも可能で、例えば8GBメモリを100に設定すると、php-fpmが消費するメモリを2G〜3Gで制御できます。 メモリが1Gのようにやや小さい場合は、静的プロセスの数を指定する方がサーバーの安定性により適しています。 これにより、php-fpmは十分なメモリしか得られず、他のアプリケーションに少量のメモリを割り当てることで、システムの動作がよりスムーズになります。

VPSのように256Mメモリの小さなサーバーでは、たとえ20Mメモリ量で計算しても、10個のphp-cgiプロセスが2億メモリを消費するため、システムクラッシュは正常であるはずです。 したがって、php-fpmプロセスの数を制御し、他のアプリケーションが占有するメモリを大まかに明確にした後、静的な小さな数を指定すればシステムの安定性が高まります。 または動的手法を使うと冗長な処理が終了し、メモリの一部を回収されるため、メモリの少ないサーバーやVPSで使うことが推奨されます。 具体的な最大容量はメモリ/20Mに基づいて得られます。 例えば、512M VPSの場合、pm.max_spare_servers を20に設定することが推奨されます。 pm.min_spare_serversについては、サーバーの負荷に応じて設定することが推奨されており、より適切な値は5~10の間でした。

4Gメモリ搭載のサーバーで200GBで十分です(私の1Gテストマシンでは64GBが最高です。最適な値を出すためにストレステストを使うことが推奨されています)

pm.max_requests = 10240;

nginxのphp-fpm設定プロセスで最大の問題は内部リーク問題です。サーバーの負荷は大きくないのに、メモリ占有が急激に増加し、メモリを急速に消費し、スワップパーティションも消費し始め、システムがすぐに停止します! 実際、公式の導入によるとphp-cgiはメモリリークがなく、各リクエスト完了後にメモリを回復しますが、オペレーティングシステムには解放されず、php-cgiが大量のメモリを占有することになります。


公式の解決策はPHP_FCGI_MAX_REQUESTSの値を下げることです。php-fpmを使う場合、対応するphp-fpm.confがmax_requestsとなります。つまり、スレッドを再起動するために送られるリクエストの数を意味します。この値を適切に下げる必要があります。php-fpmが自動的にメモリを解放するようにするためで、インターネット上の51200の多くを解放するのではなく、実際、関連する別の数値もありますmax_ 子供たち、これはphp-fpmのたびに何回のプロセスが確立されるかで、実際のメモリ消費はmax_children*max_requests*となり、これによりメモリ使用量を推定できるので、スクリプトを書いてキルする必要がなくなります。

request_terminate_timeout = 30;

最大実行時間、php.iniで設定可能(max_execution_time)

request_slowlog_timeout = 2; スローログをオンにしてください
slowlog = log/$pool.log.slow; 遅い丸太経路

rlimit_files = 1024; php-fpmのファイルディスクリプタの開き制限を追加しました





先の:アリババクラウドSLBロードバランシングHTTPヘルスチェック失敗解析
次に:DZ X3.4ファイル検証のファイル不足
 地主| 掲載地 2021/11/28 13:42:00 |
[練習] Nginxでphp-fpmのステータス情報を確認してください
https://www.itsvse.com/thread-10180-1-1.html
 地主| 掲載地 2021/12/19 10:48:43 |
 地主| 掲載地 2022/01/16 15:26:55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | グレップmax_spare_servers
;             pm.max_spare_servers - 「アイドル」状態の最大子ノード数
; デフォルト値:min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max 予備サーバー = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | グレップmin_spare_servers
;             pm.min_spare_servers - 「アイドル」状態の最小数の子どもたち
; デフォルト値:min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 5
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | グレップ・start_servers
;             pm.start_servers - スタートアップ時に生まれた子どもの数。
pm.start_servers = 20
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | グレップmax_requests
pm.max_requests = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | グレップ・request_slowlog_timeout
; 注意:request_slowlog_timeout設定されている場合、スローログは必須です
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | グレップ・スローログ
; - 『スローログ』
; 注意:request_slowlog_timeout設定されている場合、スローログは必須です
Slowlog = /alidata/log/php/$pool.log.slow
; 「slowlog」ファイルにダンプされる。 「0」の値は「オフ」を意味します。
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | グレップ・リリミット
; マスタープロセスのオープンファイルディスクリプタr限度を設定します。
; rlimit_files = 1024
; マスタープロセスの最大コアサイズ制限を設定してください。
; rlimit_core = 0
; オープンファイルディスクリプタの制限を設定します。
; rlimit_files = 1024
; 最大コアサイズの上限を設定してください。
; rlimit_core = 0
[root@old_serverコンプレッション]#
 地主| 掲載地 2022/01/16 16:54:04 |
request_terminate_timeout = 10秒

デフォルト値は0秒であり、PHPスクリプトは実行を継続します。 このようにして、すべてのphp-cgiプロセスが忙しい場合、Nginx+PHP WebServerは新しいPHPリクエストを処理できなくなり、Nginxはユーザーに「502 Bad Gateway」を返します。 request_terminate_timeout = 30 を使えます
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com