Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
php-fpmのプロセスをコントロールする
Search
DPon
February 28, 2024
Technology
0
16
php-fpmのプロセスをコントロールする
DPon
February 28, 2024
Tweet
Share
More Decks by DPon
See All by DPon
つよつよな人の理解の早さを理解する
dznbk
0
110
OpenSearchでレガシーな検索処理の大幅改善をやってやろう
dznbk
2
590
テスト書きたいけど 書けてないのは 何でなんだぜ
dznbk
0
140
Other Decks in Technology
See All in Technology
事業の財務責任に向き合うリクルートデータプラットフォームのFinOps
recruitengineers
PRO
2
210
『君の名は』と聞く君の名は。 / Your name, you who asks for mine.
nttcom
1
120
アプリにAIを正しく組み込むための アーキテクチャ── 国産LLMの現実と実践
kohju
0
220
【開発を止めるな】機能追加と並行して進めるアーキテクチャ改善/Keep Shipping: Architecture Improvements Without Pausing Dev
bitkey
PRO
1
130
Knowledge Work の AI Backend
kworkdev
PRO
0
260
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
AWS運用を効率化する!AWS Organizationsを軸にした一元管理の実践/nikkei-tech-talk-202512
nikkei_engineer_recruiting
0
170
MySQLのSpatial(GIS)機能をもっと充実させたい ~ MyNA望年会2025LT
sakaik
0
120
通勤手当申請チェックエージェント開発のリアル
whisaiyo
3
470
Snowflake導入から1年、LayerXのデータ活用の現在 / One Year into Snowflake: How LayerX Uses Data Today
civitaspo
0
2.4k
ソフトウェアエンジニアとAIエンジニアの役割分担についてのある事例
kworkdev
PRO
0
260
AIエージェント開発と活用を加速するワークフロー自動生成への挑戦
shibuiwilliam
5
850
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Statistics for Hackers
jakevdp
799
230k
BBQ
matthewcrist
89
9.9k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.4k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
410
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
210
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Become a Pro
speakerdeck
PRO
31
5.7k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
330
Code Review Best Practice
trishagee
74
19k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
69
How to build a perfect <img>
jonoalderson
0
4.7k
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 • 減らした分、サンプルは少なくなり分析に支障が出るかもしれない ◦ 今回減らした分は分析には支障ない範囲での引き下げ
ご清聴ありがとうございました