$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
php-fpmのプロセスをコントロールする
Search
DPon
February 28, 2024
Technology
0
15
php-fpmのプロセスをコントロールする
DPon
February 28, 2024
Tweet
Share
More Decks by DPon
See All by DPon
つよつよな人の理解の早さを理解する
dznbk
0
110
OpenSearchでレガシーな検索処理の大幅改善をやってやろう
dznbk
2
550
テスト書きたいけど 書けてないのは 何でなんだぜ
dznbk
0
140
Other Decks in Technology
See All in Technology
100以上の新規コネクタ提供を可能にしたアーキテクチャ
ooyukioo
0
250
ExpoのインダストリーブースでみたAWSが見せる製造業の未来
hamadakoji
0
190
日本の AI 開発と世界の潮流 / GenAI Development in Japan
hariby
1
360
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
1
760
[2025-12-12]あの日僕が見た胡蝶の夢 〜人の夢は終わらねェ AIによるパフォーマンスチューニングのすゝめ〜
tosite
0
170
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1.2k
AR Guitar: Expanding Guitar Performance from a Live House to Urban Space
ekito_station
0
150
re:Invent2025 3つの Frontier Agents を紹介 / introducing-3-frontier-agents
tomoki10
0
400
Connection-based OAuthから学ぶOAuth for AI Agents
flatt_security
0
350
アラフォーおじさん、はじめてre:Inventに行く / A 40-Something Guy’s First re:Invent Adventure
kaminashi
0
130
JEDAI認定プログラム JEDAI Order 2026 エントリーのご案内 / JEDAI Order 2026 Entry
databricksjapan
0
180
『君の名は』と聞く君の名は。 / Your name, you who asks for mine.
nttcom
1
110
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5k
The agentic SEO stack - context over prompts
schlessera
0
560
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Accessibility Awareness
sabderemane
0
24
Embracing the Ebb and Flow
colly
88
4.9k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
Crafting Experiences
bethany
0
22
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
170
Un-Boring Meetings
codingconduct
0
160
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 • 減らした分、サンプルは少なくなり分析に支障が出るかもしれない ◦ 今回減らした分は分析には支障ない範囲での引き下げ
ご清聴ありがとうございました