PHP-FPM セットアップ: パフォヌマンスを最倧化するには pm static を䜿甚したす

PHP-FPM セットアップ: パフォヌマンスを最倧化するには pm static を䜿甚したす

この蚘事の未線集バヌゞョンは最初に公開されたした ヘむデンゞェヌムス.io 圌女の蚱可を埗おここに掲茉したす 䜜者.

スルヌプットを向䞊させ、レむテンシを短瞮し、CPU ずメモリをより安定しお䜿甚するために PHP-FPM を構成する最適な方法を簡単に説明したす。 デフォルトでは、PHP-FPM の PM (プロセス マネヌゞャヌ) 行は次のずおりです。 ダむナミック、メモリが足りない堎合は、むンストヌルするこずをお勧めしたす。 オンデマンド。 php.net ドキュメントに基づいお 2 ぀のコントロヌル オプションを比范し、私のお気に入りがそれらずどのように異なるかを芋おみたしょう。 静的な 倧量トラフィックの堎合は午埌:

午埌 = ダむナミック — 子プロセスの数は、次のディレクティブに基づいお動的に構成されたす。 pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers.
午埌 = オンデマンド - プロセスはオンデマンドで䜜成されたす (サヌビスの開始時に pm.start_servers が起動される動的䜜成ずは察照的です)。
午埌 = 静的 — 子プロセスの数は固定されおおり、パラメヌタによっお瀺されたす。 pm.max_children.

詳现に぀いおは、を参照しおください。 グロヌバル ディレクティブの完党なリスト php-fpm.conf.

PHP-FPM プロセス マネヌゞャヌず CPU 呚波数コントロヌラヌの類䌌点

これは䞻題から倖れおいるように思えるかもしれたせんが、これを PHP-FPM 構成のトピックにリンクしたす。 ラップトップ、仮想マシン、専甚サヌバヌなどで、プロセッサの速床䜎䞋を少なくずも䞀床は経隓したこずのない人はいるでしょうか? CPU 呚波数のスケヌリングを芚えおいたすか? これらのオプションは次の目的で䜿甚できたす。 nix ず Windows では、プロセッサヌのスロットル蚭定を倉曎するこずで、システムのパフォヌマンスず応答性を向䞊させるこずができたす。 オンデマンド Ма パフォヌマンス*。 今回は、説明を比范しお類䌌点を芋おみたしょう。

ガバナヌ=オンデマンド — 珟圚の負荷に応じおプロセッサ呚波数を動的にスケヌリングしたす。 最倧呚波数たで急速に䞊昇し、非アクティブな時間が長くなるず呚波数を䞋げたす。
知事=保守掟= 珟圚の負荷に応じた動的な呚波数スケヌリング。 オンデマンドよりもスムヌズに呚波数を増枛したす。
ガバナヌパフォヌマンス — 呚波数は垞に最倧です。

詳现に぀いおは、を参照しおください。 プロセッサ呚波数レギュレヌタパラメヌタの完党なリスト.

類䌌点がわかりたすか? を䜿甚するのが最善であるこずを玍埗しおいただくために、この比范を瀺したかったのです。 午埌静的 PHP-FPMの堎合。

プロセッサヌレギュレヌタヌパラメヌタヌの堎合 パフォヌマンス ほが完党にサヌバヌの CPU 制限に䟝存するため、パフォヌマンスを安党に向䞊させるのに圹立ちたす。 もちろん、これに加えお、枩床、バッテリヌ充電 (ラップトップの)、プロセッサヌを垞に 100% で実行するこずによるその他の副䜜甚などの芁因もありたす。 パフォヌマンス蚭定により、最速のプロセッサ パフォヌマンスが保蚌されたす。 たずえば、次のこずを読んでください。 Raspberry Piのforce_turboパラメヌタ、RPi パネルはレギュレヌタヌを䜿甚したす。 パフォヌマンスここでは、CPU クロック速床が䜎いため、パフォヌマンスの向䞊がより顕著になりたす。

pm static を䜿甚しおサヌバヌのパフォヌマンスを最倧化する

PHP-FPM オプション 午埌静的 サヌバヌの空きメモリに倧きく䟝存したす。 メモリが少ない堎合は遞択するこずをお勧めしたす オンデマンド たたは ダむナミック。 䞀方、メモリがある堎合は、pm を蚭定するこずで PHP プロセス マネヌゞャヌのオヌバヌヘッドを回避できたす。 静的な サヌバヌの最倧容量たで。 蚀い換えれば、すべおがうたく蚈算されおいれば、次のこずを確立する必芁がありたす。 pm.static 実行可胜な PHP-FPM プロセスの最倧量たで、 メモリ䞍足やキャッシュ䞍足による問題を匕き起こすこずなく、 ただし、プロセッサヌを圧倒し、実行を埅機しおいる倚数の PHP-FPM 操䜜が蓄積されるほど高くはありたせん。.

PHP-FPM セットアップ: パフォヌマンスを最倧化するには pm static を䜿甚したす

䞊のスクリヌンショットでは、サヌバヌには pm = 静的、および pm.max_children = 100で、これは䜿甚可胜な 10 GB のうち玄 32 GB を占めたす。匷調衚瀺された列に泚目しおください。ここではすべおが明確です。 このスクリヌンショットでは、Google Analytics に玄 200 人のアクティブ ナヌザヌ (60 秒以䞊) が含たれおいたす。 このレベルでは、PHP-FPM 子プロセスの玄 70% がただアむドル状態です。 これは、珟圚のトラフィックに関係なく、PHP-FPM が垞にサヌバヌ リ゜ヌスの最倧量に蚭定されるこずを意味したす。 アむドル状態のプロセスはトラフィックのピヌクを埅ち、即座に応答したす。 たで埅぀必芁はありたせん pm 子プロセスを䜜成し、期間が経過するず子プロセスを終了したす pm.process_idle_timeout。 倀を非垞に高く蚭定したした pm.max_requestsこれは、PHP でのメモリ リヌクのない正垞に動䜜しおいるサヌバヌであるためです。 むンストヌルできたす pm.max_requests = 0 既存および将来の PHP スクリプトに完党な自信がある堎合は、静的を䜿甚しおください。 ただし、時間をかけおスクリプトを再実行するこずをお勧めしたす。 䞍必芁な PM コストを避けたいため、リク゚ストの数を倚く蚭定したす。 たずえば、少なくずも pm.max_requests = 1000 - 数量に応じお pm.max_children および XNUMX 秒あたりのリク゚スト数。

スクリヌンショットはコマンドを瀺しおいたす Linuxトップ、u (ナヌザヌ) ず PHP-FPM ナヌザヌ名でフィルタリングされたす。 最初の 50 ほどのプロセスのみが衚瀺されたす (正確に数えたわけではありたせん) が、基本的に「top」にはタヌミナル りィンドりに収たる䞊䜍の統蚈が衚瀺されたす。 この堎合は、% CPU (%CPU) で゜ヌトされおいたす。 100 個の PHP-FPM プロセスをすべお衚瀺するには、次のコマンドを実行したす。

top -bn1 | grep php-fpm

pm オンデマンドずダむナミックをい぀䜿甚するか

午埌をご利甚の堎合 ダむナミック、次のような゚ラヌが発生したす。

WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children

パラメヌタを倉曎しおみおください。次のように゚ラヌは消えたせん。 Serverfault のこの投皿で説明されおいたす。 この堎合、pm.min 倀が小さすぎ、Web トラフィックの倉動が倧きく、山も谷も深いため、pm.min を適切に調敎するこずが困難です。 ダむナミック。 通垞はpmが䜿甚されたす オンデマンド, 同じ投皿でアドバむスしたように。 しかし、これはさらに悪いこずです。 オンデマンド トラフィックがほずんどない、たたはたったくない堎合、アむドル プロセスをれロに終了したすが、それでもトラフィックの倉曎によるオヌバヌヘッドが発生したす。 もちろん、膚倧な埅ち時間を蚭定した堎合を陀きたす。 そしお、それを䜿甚する方が良いです pm.static + 高い数倀 pm.max_requests.

PM ダむナミック 特に オンデマンド 耇数の PHP-FPM プヌルがある堎合に䟿利です。 たずえば、耇数の cPanel アカりントたたは耇数の Web サむトを異なるプヌルでホストするずしたす。 たずえば、100 個以䞊の cpanel アカりントず玄 200 個のドメむンを持぀サヌバヌがありたすが、pm.static や動的でさえも私を救うこずはできたせん。 ここで必芁なのは オンデマンド結局のずころ、Web サむトの XNUMX 分の XNUMX 以䞊はトラフィックをほずんど、たたはたったく受け取っおいたせん。 オンデマンド すべおの子プロセスが削陀されるため、メモリが倧幅に節玄されたす。 幞いなこずに、cPanel 開発者はこれに気づき、倀をデフォルトに蚭定したした。 オンデマンド。 以前は、デフォルトが ダむナミック, PHP-FPM は、負荷の高い共有サヌバヌにはたったく適しおいたせんでした。 倚くの人が䜿甚しおいたす 補足、午埌だから ダむナミック アむドル状態のプヌルや cPanel PHP-FPM アカりントでもメモリを消費したす。 おそらく、トラフィックが良奜であれば、倚数の PHP-FPM プヌルを備えたサヌバヌ (共有ホスティング) でホストされるこずはありたせん。

たずめ

PHP-FPM を䜿甚しおいおトラフィックが倚い堎合は、プロセス マネヌゞャヌ オンデマンド О ダむナミック PHP-FPM の堎合、固有のオヌバヌヘッドによりスルヌプットが制限されたす。 システムを理解し、サヌバヌの最倧容量に応じお PHP-FPM プロセスを構成したす。 最初のセット pm.max_children PMの最倧䜿甚量に応じお ダむナミック たたは オンデマンドを遞択し、メモリずプロセッサが過負荷にならずに動䜜するレベルたでこの倀を増やしたす。 それに気づくでしょう 午埌静的、すべおがメモリ内にあるため、トラフィックの急増による CPU の急増は時間の経過ずずもに枛少し、サヌバヌず CPU の負荷平均は暪ばいになりたす。 PHP-FPM プロセスの平均サむズは Web サヌバヌによっお異なり、手動構成が必芁なため、より自動化されたプロセス マネヌゞャヌが必芁になりたす。 ダむナミック О オンデマンド - もっず人気がありたす。 この蚘事がお圹に立おば幞いです。

UPD ベンチマヌクチャヌトを远加したした ab。 PHP-FPM プロセスがメモリ内にある堎合、プロセスが埅機しおメモリを消費する代わりにパフォヌマンスが向䞊したす。 自分にずっお最適な遞択肢を芋぀けおください。

PHP-FPM セットアップ: パフォヌマンスを最倧化するには pm static を䜿甚したす

出所 habr.com

コメントを远加したす