Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
php-fpmのプロセスをコントロールする
Search
D-PONTARO
February 28, 2024
Technology
0
6
php-fpmのプロセスをコントロールする
D-PONTARO
February 28, 2024
Tweet
Share
More Decks by D-PONTARO
See All by D-PONTARO
OpenSearchでレガシーな検索処理の大幅改善をやってやろう
dznbk
2
260
テスト書きたいけど 書けてないのは 何でなんだぜ
dznbk
0
120
Other Decks in Technology
See All in Technology
Rebase エンジニアリング組織の現状とこれから
rebase_engineering
0
140
Introduction to Bill One Development Engineer
sansan33
PRO
0
240
ProductZine Day 2025 Assuredのプロダクトディスカバリー
kechol
0
110
Cloud Run を解剖して コンテナ監視を考える / Breaking Down Cloud Run to Rethink Container Monitoring
aoto
PRO
0
110
データ戦略部門 紹介資料
sansan33
PRO
1
3.1k
ゴリラ.vim #36 ~ Vim x SNS ~ スポンサーセッション
yasunori0418
1
310
面接を通過するためにやってて良かったこと3選
sansantech
PRO
0
130
Azure Developer CLI と Azure Deployment Environment / Azure Developer CLI and Azure Deployment Environment
nnstt1
1
120
ソフトウェアは捨てやすく作ろう/Let's make software easy to discard
sanogemaru
10
5.7k
CloudTrailも、GuardDutyも、VPC Flow logsも… ログ多すぎ問題の整理術
nikuyoshi
5
650
MCP で繋ぐ Figma とデザインシステム〜LLM を使った UI 実装のリアル〜
kimuson
2
1.3k
Devin&Cursor、それぞれの「本質」から導く最適ユースケース戦略
empitsu
8
2.1k
Featured
See All Featured
Visualization
eitanlees
146
16k
A Modern Web Designer's Workflow
chriscoyier
693
190k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Bash Introduction
62gerente
614
210k
Into the Great Unknown - MozCon
thekraken
39
1.8k
The Cult of Friendly URLs
andyhume
78
6.4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
15
880
The Power of CSS Pseudo Elements
geoffreycrofte
76
5.8k
For a Future-Friendly Web
brad_frost
178
9.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
25
2.8k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Transcript
php-fpmのプロセスをコントロールする
自己紹介 • 堂薗 伸樹(どうぞの のぶき) • スターフェスティバル株式会社 • エンジニア • 38歳、妻、子2人、犬 DPon
https://twitter.com/DPontaro
今回お話すること • 既存WebアプリケーションにNew Relic入れることになった • 本番導入したらパフォーマンス悪くなり障害発生、切り戻し • 改めて検証 • php-fpmとNew
Relicのパラメータ調整して無事導入
New Relic アプリケーションパフォーマンス管理(APM)ツール。 Webアプリケーションやサーバーのパフォーマンスを可視化。 開発者はシステムの問題を迅速に特定し、改善することができるようになる。
php-fpm FPM (FastCGI Process Manager) CGIはリクエスト毎にプロセスの生成、破棄が行われるのでリクエスト数の増大によりそのオーバーヘッドが無視でき なくなる。
php-fpmでは起動時にプロセスをメモリ上に保持(プール)し、リクエスト毎にプロセスを再利用するためオーバーヘッ ドなく処理できる 今回お話するアプリケーションは、nginx + php-fpmで実装、AWSでECSクラスター上で稼働している。
New Relic導入 社内で各アプリケーションへの導入が進んでおり私が担当していたアプリケーションにも導入することに。 が、本番導入した際パフォーマンスに影響が出てしまい、切り戻し。 New Relicというツールの特性上、実行されてるコードのトレースが行われる。 →そのあたりが影響した可能性が高そう。
検証 New Relicを入れたECSクラスターを別途用意。 n%だけそちらに割り振られるようにALBのリスナールールを設定して検証を進めることに。
いざモニタリング New Relicを導入したコンテナのCPU使用率 ALBのリクエスト数
発生していた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個のプロセスを生成しようとしている状態。
プロセス数を制御する 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
プロセスの再起動を制御する 引き上げて再起動のタイミングがうまくバラけた pm.max_requests = 500 pm.max_requests = 5000 pm.max_requestsはプロセス毎に設定したリクエスト数をさばくとプロセスの再起動がかかる プロセス毎の再起動までのリクエスト数が小さく、近しいタイミングでプロセスの再起動が起きたのではないか
またCPU使用率があがった。 同様のタイミングでメモリがガクッと空いていた(キャプチャ漏れ) php-fpmのプロセスの再起動が一気に起きた可能性と推測。
NewRelicのパラメータもちょいと調整 1分あたりにNew Relicに送信されるイベント量の設定。デフォルトは 2000。 引き下げてレスポンスタイムも改善。 newrelic.span_events.max_samples_stored = 1000 リクエストは捌けるようになり CPU使用率は問題なくなったが、レスポンスタイムが導入前より
50~100msほど 上昇傾向。
それぞれのデメリット pm = static • リクエストが少ないときはアイドル状態のプロセスが多くあり、余分にメモリを使用する ◦ 今回メモリは余裕があったのでdynamicにしておく意義は薄いと判断 pm.max_requests •
値を引き上げるとプロセスが長生きする分、メモリ使用量への影響が出てくる ◦ 今回対応したアプリケーションではリソース的に問題ない範囲の引き上げ newrelic.span_events.max_samples_stored • 減らした分、サンプルは少なくなり分析に支障が出るかもしれない ◦ 今回減らした分は分析には支障ない範囲での引き下げ
ご清聴ありがとうございました