Upgrade to Pro — share decks privately, control downloads, hide ads and more …

php-fpmのプロセスをコントロールする

D-PONTARO
February 28, 2024

 php-fpmのプロセスをコントロールする

D-PONTARO

February 28, 2024
Tweet

More Decks by D-PONTARO

Other Decks in Technology

Transcript

  1. php-fpm 
 
 
 FPM (FastCGI Process Manager)
 CGIはリクエスト毎にプロセスの生成、破棄が行われるのでリクエスト数の増大によりそのオーバーヘッドが無視でき なくなる。


    
 php-fpmでは起動時にプロセスをメモリ上に保持(プール)し、リクエスト毎にプロセスを再利用するためオーバーヘッ ドなく処理できる
 今回お話するアプリケーションは、nginx + php-fpmで実装、AWSでECSクラスター上で稼働している。

  2. 発生していたwarning WARNING: [pool www] seems busy (you may need to

    increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 9 total children リクエスト量が生成済のプロセス数を上回って処理できていなかった。 生成済のプロセスは9個、うちアイドル状態のものが 0、別途32個のプロセスを生成しようとしている状態。
  3. プロセス数を制御する dynamic -> staticに変更。 起動時からmax_children分のプロセスを生成するように調整して再度検証。 pm = dynamic pm.max_children =

    40 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 pm = static pm.max_children = 40 # 以下はstatic時には意味をなさなくなる pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
  4. それぞれのデメリット pm = static
 • リクエストが少ないときはアイドル状態のプロセスが多くあり、余分にメモリを使用する
 ◦ 今回メモリは余裕があったのでdynamicにしておく意義は薄いと判断
 pm.max_requests
 •

    値を引き上げるとプロセスが長生きする分、メモリ使用量への影響が出てくる
 ◦ 今回対応したアプリケーションではリソース的に問題ない範囲の引き上げ
 newrelic.span_events.max_samples_stored
 • 減らした分、サンプルは少なくなり分析に支障が出るかもしれない
 ◦ 今回減らした分は分析には支障ない範囲での引き下げ