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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
DPon
February 28, 2024
Technology
39
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
php-fpmのプロセスをコントロールする
DPon
February 28, 2024
More Decks by DPon
See All by DPon
TiDBのアーキテクチャから学ぶ分散システム入門 〜MySQL互換のNewSQLは何を解決するのか〜 / tidb-architecture-study
dznbk
1
430
『自分なんかが…』を超える。 プロポーザル提出までの心理的ハードルの外し方 / proposal-output
dznbk
1
2k
つよつよな人の理解の早さを理解する
dznbk
0
190
OpenSearchでレガシーな検索処理の大幅改善をやってやろう
dznbk
2
1.1k
テスト書きたいけど 書けてないのは 何でなんだぜ
dznbk
0
190
Other Decks in Technology
See All in Technology
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
19k
PLaMoを毎日の開発で使い育てていく
pfn
PRO
0
180
AIがコードを書く時代、人間は何を保証するのか———馬場さんと考える、開発者に求められる新しい責任と価値 - TECH PLAY
netmarkjp
0
1.3k
LangfuseによるLLMOps基盤の構築と活用事例
zozotech
PRO
1
270
NetBoxを利用した作業効率化の試み_NetDevNight4
tnoha
0
460
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
210
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
16
5.6k
[MIRU26] Open-Vocabulary Intention-Guided Object Detection in Diverse Scenes
keio_smilab
PRO
0
140
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
190
Retriever と Reranker、結局どうする?
kazuaki
2
660
Cursor Meetup Sapporo - Cursor物語 続編
cocacola917
0
120
変化の早いClaude Codeを 書籍に落とし込む
oikon48
6
1.2k
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
Building the Perfect Custom Keyboard
takai
2
830
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
240
Technical Leadership for Architectural Decision Making
baasie
3
460
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
How to train your dragon (web standard)
notwaldorf
97
6.7k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
270
Typedesign – Prime Four
hannesfritz
42
3.1k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
330
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 • 減らした分、サンプルは少なくなり分析に支障が出るかもしれない ◦ 今回減らした分は分析には支障ない範囲での引き下げ
ご清聴ありがとうございました