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 をちょっとチューニングしてみよう #phpblt
Search
Yuichiro SAITO
February 22, 2017
Technology
8k
5
Share
php-fpm をちょっとチューニングしてみよう #phpblt
PHP BLT #6
2017-02-22 @ メルカリ 東京 (六本木ヒルズ)
Yuichiro SAITO
February 22, 2017
More Decks by Yuichiro SAITO
See All by Yuichiro SAITO
FinTech スタートアップのセキュリティチェックシートとの向き合い方 / AWS FinTech Bootcamp! Compliance
koemu
0
720
クラウドを積極活用したサービスの開発のために / AWS FinTech Bootcamp! Basic
koemu
0
340
ワークショップFinTech アーキテクチャ / AWS FinTech Bootcamp! Workshop
koemu
0
290
正しい理解で作る安心安全な FinTech の IT インフラ / tech play aws 2022 2
koemu
1
370
AWSの「今」 -PHPのコードを素早く動かすためのサービスのご紹介 / PHPCon2022 AWS Japan Session
koemu
2
2.3k
PdMとエンジニアのより良いコミュニケーションに向けて / Improve communication between Product Manager and Software Engineer
koemu
1
690
フェイズ別・スタートアップ企業への技術選定 シード編 #AWS #AWSStartup / Startup Tech 101 for Seed
koemu
0
540
AWSを使って送金機能を実装してみよう - 「sunabar-GMOあおぞらネット銀行API実験場-」コミュニティイベント第6弾
koemu
0
1.1k
Hardening II SU Softening Day - Team カムイ Presentation
koemu
0
4k
Other Decks in Technology
See All in Technology
「QA=テスト」「シフトレフト=スクラムイベントの参加者の一員」の呪縛を解く。アジャイルな開発を止めないために、10Xで挑んだ「右側のしわ寄せ」解消記 #scrumniigata
nihonbuson
PRO
3
860
ハーネスエンジニアリング入門
knishioka
0
120
ファインディの事業拡大を支える 拡張可能なデータ基盤へのリアーキテクチャ
hiracky16
0
890
【技術書典20】OpenFOAM(自宅で深める流体解析)流れと熱移動(2)
kamakiri1225
0
370
もっとコンテンツをよく構造化して理解したいので、LLM 時代こそ Taxonomy の設計品質に目を向けたい〜!
morinota
0
190
UIライブラリに依存しすぎないReact Native設計を目指して
grandbig
0
190
小さいVue.jsを30分で作る
hal_spidernight
0
140
自動テストだけで リリース判断できるチームへ - 鍵はテストの量ではなくリリース判断基準の再設計にあった / Redesigning Release Criteria for Lightweight Releases
ewa
7
3.4k
変化の激しい時代をゴキゲンに生き抜くために 〜ストレスマネジメントのススメ〜
kakehashi
PRO
4
1.1k
Fabric MCPの紹介と使い分け
ryomaru0825
1
120
国内外の生成AIセキュリティの最新動向 & AIガードレール製品「chakoshi」のご紹介 / Latest Trends in Generative AI Security (Domestic & International) & Introduction to AI Guardrail Product "chakoshi"
nttcom
4
1.7k
毎日の作業を Claude Code 経由にしたら、 ノウハウがコードになった
kossykinto
0
680
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
820
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
180
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.9k
Odyssey Design
rkendrick25
PRO
2
610
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
220
Navigating Weather and Climate Data
rabernat
0
180
Prompt Engineering for Job Search
mfonobong
0
290
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1k
Designing Powerful Visuals for Engaging Learning
tmiket
1
360
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Believing is Seeing
oripsolob
1
120
Transcript
php-fpm Λͪΐͬͱνϡʔχϯάͯ͠ ΈΑ͏ • Yuichiro Saito (@koemu) • 2017-02-22 @
ϝϧΧϦ ౦ژΦϑΟε © Yuichiro Saito (koemu), 2017 1
ࠓͷ͓ • php-fpm ͷࢠϓϩηεΛվળͯ͠ΈΑ͏ • ͍ͬͯΔΠϯελϯεͷੑೳΛҾ͖ग़ͦ͏ • (νϡʔχϯάೖͷ͓Ͱ͢) © Yuichiro
Saito (koemu), 2017 2
લఏ݅ ڥ koemu$ cat /etc/debian_version # Ubuntu 16.04 LTS stretch/sid
koemu$ php -v PHP 7.0.13-0ubuntu0.16.04.1 (cli) ( NTS ) koemu$ nginx -v nginx version: nginx/1.10.0 (Ubuntu) Ubuntu 16.04 LTS্ͷnginx + php-fpmͰಈ͘ߏஙͨ͠લఏͰ͓͠·͢ɻ αʔόΠϯελϯεɺಛه͕ͳ͍ݶΓAWS౦ژϦʔδϣϯ m4.large (2vCPU) ͱ͠·͢ɻ © Yuichiro Saito (koemu), 2017 3
Լ४උ $ sudo apt-get install apache2-utils htop ҙ: ຊ ab
Λ࣮ߦ͢Δαʔό͚ͨ΄͏͕͍͍Ͱ͢ɻࠓ ճ؆қతͳܗͰհ͠·͢ɻ © Yuichiro Saito (koemu), 2017 4
σϑΥϧτͰͬͯ·ͤΜ͔ʁ Ubuntu 16.04 LTSͷ߹ pm = dynamic pm.max_children = 5
pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 ;pm.process_idle_timeout = 10s; ;pm.max_requests = 500 © Yuichiro Saito (koemu), 2017 5
σϑΥϧτͷ··ͩͱ • ىಈϓϩηε2ɻ • ࠷େϓϩηε͕5ɻ ͦͯ͠ • ϓϩηεಈతʹ૿ݮ͢Δɻ ͋ͳͨͷ࡞ͬͨΞϓϦɺ͜ΕͰੑೳग़·͔͢Ͷʁ ©
Yuichiro Saito (koemu), 2017 6
͍ͬͨͳ͍ʂʂʂʂ © Yuichiro Saito (koemu), 2017 7
ϓϩηεΛௐͯ͠ΈΔ © Yuichiro Saito (koemu), 2017 8
ࢼ͠ʹܭଌͯ͠ΈΔ ୯७ͳ phpinfo() Λฦ͚ͩ͢ͷΞϓϦέʔγϣϯɻ $ ab -l -n 10000 -c
1 http://localhost/index.php Requests per second: 1509.23 [#/sec] (mean) $ ab -l -n 10000 -c 3 http://localhost/index.php Requests per second: 1734.29 [#/sec] (mean) $ ab -l -n 10000 -c 5 http://localhost/index.php Requests per second: 1852.83 [#/sec] (mean) $ ab -l -n 10000 -c 10 http://localhost/index.php Requests per second: 1817.48 [#/sec] (mean) $ ab -l -n 10000 -c 20 http://localhost/index.php Requests per second: 1767.25 [#/sec] (mean) © Yuichiro Saito (koemu), 2017 9
5Ͱݶʁ pm.max_children = 5 Ͱઃఆͨ͠Ͱ಄ଧͪͰ͢Ͷɻ © Yuichiro Saito (koemu), 2017
10
͜͜Ͱฤू diff --git a/php/7.0/fpm/pool.d/www.conf b/php/7.0/fpm/pool.d/www.conf index 635f192..7808cde 100644 --- a/php/7.0/fpm/pool.d/www.conf
+++ b/php/7.0/fpm/pool.d/www.conf @@ -93,7 +93,7 @@ listen.group = www-data ; pm.process_idle_timeout - The number of seconds after which ; an idle process will be killed. ; Note: This value is mandatory. -pm = dynamic +pm = static ; The number of child processes to be created when pm is set to 'static' and the ; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'. @@ -104,7 +104,7 @@ pm = dynamic ; forget to tweak pm.* to fit your needs. ; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand' ; Note: This value is mandatory. -pm.max_children = 5 +pm.max_children = 10 © Yuichiro Saito (koemu), 2017 11
มߋՕॴʹ͍ͭͯ pm = static • ࢠϓϩηεΛಈతʹ૿ݮ͢ΔͷͰͳ͘ɺݻఆʹ͠·͢ɻ • ಈ͘ΞϓϦέʔγϣϯܾͬͯ·ͬͯ·͢ΑͶʁ • ܾ·͍ͬͯΔͷͳΒɺ࠷ॳ͔Βݻఆͨ͠΄͏͕૿ݮͷΦʔόʔϔουݮΒͤ·͢ΑͶɻ
pm.max_children = 10 • ࢠϓϩηε • 10ʹઃఆ • ͜ͷ͕Ռͨͯ͠ ద ͔͕ࠓճͷϙΠϯτʂ © Yuichiro Saito (koemu), 2017 12
10ϓϩηεͰͲ͏ͩ $ ab -l -n 10000 -c 1 http://localhost/index.php Requests
per second: 1499.22 [#/sec] (mean) $ ab -l -n 10000 -c 3 http://localhost/index.php Requests per second: 1704.51 [#/sec] (mean) $ ab -l -n 10000 -c 5 http://localhost/index.php Requests per second: 1802.32 [#/sec] (mean) $ ab -l -n 10000 -c 10 http://localhost/index.php Requests per second: 1774.85 [#/sec] (mean) $ ab -l -n 10000 -c 20 http://localhost/index.php Requests per second: 1774.27 [#/sec] (mean) © Yuichiro Saito (koemu), 2017 13
…ɺ͋Μ·มΘΒͳ͍Ͱ͢Ͷɻ © Yuichiro Saito (koemu), 2017 14
࣮…ฒྻ3࣌: CPUΛ΄΅͍͍ͬͯΔ © Yuichiro Saito (koemu), 2017 15
͍ɻ © Yuichiro Saito (koemu), 2017 16
ͰCPUίΞΛ૿͢ͱͲ͏͔ c4.4xlarge (16vCPU) ʹͯ͠Έ·͢ɻ $ ab -l -n 10000 -c
1 http://localhost/index.php Requests per second: 1918.79 [#/sec] (mean) $ ab -l -n 10000 -c 3 http://localhost/index.php Requests per second: 4845.39 [#/sec] (mean) $ ab -l -n 10000 -c 5 http://localhost/index.php Requests per second: 7109.63 [#/sec] (mean) $ ab -l -n 10000 -c 10 http://localhost/index.php Requests per second: 7400.49 [#/sec] (mean) $ ab -l -n 10000 -c 20 http://localhost/index.php Requests per second: 7771.68 [#/sec] (mean) © Yuichiro Saito (koemu), 2017 17
ͳͥॲཧͰ͖ΔΑ͏ʹͳͬͨͷ͔ʁ • ࠓ·Ͱ: ϓϩηε > ίΞ • ͋Δϓϩηε͕CPUΛѲ͍ͬͯΔͱɺ΄͔ͷϓϩηεॲཧ͕Ͱ͖ͳ͍ɻ • ࠷ॳ2vCPU→2ϓϩηεʴαఔ͕ॲཧͷݶɻ
• c4.4xlarge ʹมߋ: ϓϩηε < ίΞ • Ͳ͔͜ͷCPUίΞ͕ۭ͍͍ͯΔɻ • 10ϓϩηε·ͰىಈͰ͖ΔΑ͏ʹ͍ͯ͠ΔͷͰɺ16ίΞͷͲΕ͔Λࣗ༝ʹಠ͠ ͯ͑Δঢ়ଶͰ͋ΓɺଞͷϓϩηεͷऴྃΛͭඞཁ͕ͳ͘ͳΔɻ • 1ϓϩηε͋ͨΓͷੑೳΛҾ͖ग़ͤΔΑ͏ʹͳͬͨɻ © Yuichiro Saito (koemu), 2017 18
ͰࠓͷઃఆͰͲ͜·Ͱߦ͚Δ͔ʁ $ ab -n 10000 -c 30 http://localhost/index.php Requests per
second: 8418.15 [#/sec] (mean) $ ab -n 10000 -c 50 http://localhost/index.php Requests per second: 7250.75 [#/sec] (mean) Ͳ͏Βಉ࣌20ʙ30ଓ͕͍͍ͱ͜ΖͷΑ͏Ͱ͢ɻ © Yuichiro Saito (koemu), 2017 19
CPU༨༟͋Γͦ͏ © Yuichiro Saito (koemu), 2017 20
Ͱ pm.max_children = 16 ʹ͠·͢ɻ $ ab -l -n 10000
-c 10 http://localhost/index.php Requests per second: 9959.54 [#/sec] (mean) $ ab -l -n 10000 -c 20 http://localhost/index.php Requests per second: 14348.17 [#/sec] (mean) $ ab -l -n 10000 -c 30 http://localhost/index.php Requests per second: 14814.62 [#/sec] (mean) $ ab -l -n 10000 -c 40 http://localhost/index.php Requests per second: 14224.85 [#/sec] (mean) $ ab -l -n 10000 -c 50 http://localhost/index.php Requests per second: 14220.10 [#/sec] (mean) ಉ࣌20ʙ30ଓ·Ͱͳͷ͔ΘΓ·ͤΜ͕ɺrps͕͋Γ·ͨ͠ɻ © Yuichiro Saito (koemu), 2017 21
͔͠͠CPU ·ͩ༨༟͕͋ΔΜͰ͢ © Yuichiro Saito (koemu), 2017 22
Ͱ pm.max_children = 32 ʹ͠·͢ɻ ฏۉ70%ఔͰਪҠ͍ͯ͠·͢ͷͰɺϓϩηεΛ୯७ʹഒʹͯ͠Έ·͠ΐ͏ɻ $ ab -l -n
10000 -c 10 http://localhost/index.php Requests per second: 10123.11 [#/sec] (mean) $ ab -l -n 10000 -c 20 http://localhost/index.php Requests per second: 12894.17 [#/sec] (mean) $ ab -l -n 10000 -c 30 http://localhost/index.php Requests per second: 14858.04 [#/sec] (mean) $ ab -l -n 10000 -c 40 http://localhost/index.php Requests per second: 16056.80 [#/sec] (mean) $ ab -l -n 10000 -c 50 http://localhost/index.php Requests per second: 16279.67 [#/sec] (mean) ಉ࣌30ʙ40ଓ͘Β͍·Ͱ͍͚ͦ͏Ͱ͢Ͷɻͨͩɺ͜ΕҎ্ͷ্ݟࠐΊͳͦ͞͏Ͱ͢ɻ © Yuichiro Saito (koemu), 2017 23
php-fpm ͷεςʔλεϖʔδΛݟΔͱ pool: www process manager: static start since: 225
accepted conn: 700001 listen queue: 0 max listen queue: 0 listen queue len: 0 idle processes: 31 active processes: 1 total processes: 32 max active processes: 32 max children reached: 0 slow requests: 0 max active processes: 32ɻҰഋଓΛ͍͑ͯΔΑ͏Ͱ͢ɻ © Yuichiro Saito (koemu), 2017 24
CPU͋Δఔ͍͑ͯ·͢Ͷ © Yuichiro Saito (koemu), 2017 25
࣮ࡍӡ༻͍ͯͯ͠ؾʹ͍ͯ͠Δ͜ͱ • զ͕ՈͷWordpressͷࣄྫ © Yuichiro Saito (koemu), 2017 26
࣮ࡍͷϝϞϦ༻ྔͱCPU༻ྔ © Yuichiro Saito (koemu), 2017 27
PHP 5.4→PHP 7.0ʹΞοϓσʔτͨ࣌͠ ϝϞϦ༻ྔ͕͙ͬͱݮΔ © Yuichiro Saito (koemu), 2017 28
ҙͨ͜͠ͱ • CPUεΧεΧͳͷ͕ͩɺϝϞϦΛΑ͘৯͍ͬͯΔɻ • ϓϩηεΛ૿͗͢͠ΔͱɺCPUΑΓϝϞϦͷྔ͕Γͳ͘ͳͬͨɻ • ϝϞϦͷྔΛݟͳ͕ΒϓϩηεΛ૿͢ඞཁ͕͋ͬͨɻ • ಛʹϝϞϦࡌྔ͕গͳ͍VPSཁҙɻ •
࣮ࡍɺଌఆ݁ՌΛجʹͨ͠ઃఆͰ͍͍͔ܧଓతͳϞχλϦϯά͕ඞཁɻ • ಛʹɺϝϞϦͷಈ࣌ؒಈ͔͞ͳ͍ͱΘ͔Βͳ͍͜ͱ͋Δɻ • Wordpressɺཧը໘Λ্ཱͪ͛ΔͱΑΓϝϞϦΛফඅ͢Δɻ • ͨͩ୯ʹӡ༻͍ͯͯͩ͠Ίɻ͍Ζ͍ΖͳγφϦΦΛࢼ͢ɻ © Yuichiro Saito (koemu), 2017 29
·ͱΊ • php-fpmΛσϑΥϧτͰ͏͜ͱ͔Β٫ͯ͠ΈΑ͏ • php-fpmͷϓϩηεCPUίΞ*2͘Β͍͕·ͣ҆ • ଌΔͱ͖topΛΈͳ͕ΒΔ͜ͱ • ͪͳΈʹApache+mod_phpͰಉ͡ख๏͕͑·͢ ©
Yuichiro Saito (koemu), 2017 30