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
DPon
February 28, 2024
Technology
0
10
php-fpmのプロセスをコントロールする
DPon
February 28, 2024
Tweet
Share
More Decks by DPon
See All by DPon
つよつよな人の理解の早さを理解する
dznbk
0
91
OpenSearchでレガシーな検索処理の大幅改善をやってやろう
dznbk
2
330
テスト書きたいけど 書けてないのは 何でなんだぜ
dznbk
0
130
Other Decks in Technology
See All in Technology
Obsidian応用活用術
onikun94
1
470
react-callを使ってダイヤログをいろんなとこで再利用しよう!
shinaps
1
230
落ちる 落ちるよ サーバーは落ちる
suehiromasatoshi
0
150
企業の生成AIガバナンスにおけるエージェントとセキュリティ
lycorptech_jp
PRO
2
160
これでもう迷わない!Jetpack Composeの書き方実践ガイド
zozotech
PRO
0
320
Flutterでキャッチしないエラーはどこに行く
taiju59
0
230
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
810
なぜSaaSがMCPサーバーをサービス提供するのか?
sansantech
PRO
8
2.8k
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
11
4.6k
Platform開発が先行する Platform Engineeringの違和感
kintotechdev
4
540
Generative AI Japan 第一回生成AI実践研究会「AI駆動開発の現在地──ブレイクスルーの鍵を握るのはデータ領域」
shisyu_gaku
0
140
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
2
410
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
A better future with KSS
kneath
239
17k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
111
20k
Producing Creativity
orderedlist
PRO
347
40k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Rails Girls Zürich Keynote
gr2m
95
14k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
520
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 • 減らした分、サンプルは少なくなり分析に支障が出るかもしれない ◦ 今回減らした分は分析には支障ない範囲での引き下げ
ご清聴ありがとうございました