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
PRO
February 22, 2017
Technology
5
7.7k
php-fpm をちょっとチューニングしてみよう #phpblt
PHP BLT #6
2017-02-22 @ メルカリ 東京 (六本木ヒルズ)
Yuichiro SAITO
PRO
February 22, 2017
Tweet
Share
More Decks by Yuichiro SAITO
See All by Yuichiro SAITO
FinTech スタートアップのセキュリティチェックシートとの向き合い方 / AWS FinTech Bootcamp! Compliance
koemu
PRO
0
590
クラウドを積極活用したサービスの開発のために / AWS FinTech Bootcamp! Basic
koemu
PRO
0
250
ワークショップFinTech アーキテクチャ / AWS FinTech Bootcamp! Workshop
koemu
PRO
0
240
正しい理解で作る安心安全な FinTech の IT インフラ / tech play aws 2022 2
koemu
PRO
1
300
AWSの「今」 -PHPのコードを素早く動かすためのサービスのご紹介 / PHPCon2022 AWS Japan Session
koemu
PRO
2
2k
PdMとエンジニアのより良いコミュニケーションに向けて / Improve communication between Product Manager and Software Engineer
koemu
PRO
1
570
フェイズ別・スタートアップ企業への技術選定 シード編 #AWS #AWSStartup / Startup Tech 101 for Seed
koemu
PRO
0
490
AWSを使って送金機能を実装してみよう - 「sunabar-GMOあおぞらネット銀行API実験場-」コミュニティイベント第6弾
koemu
PRO
0
1.1k
Hardening II SU Softening Day - Team カムイ Presentation
koemu
PRO
0
3.8k
Other Decks in Technology
See All in Technology
プロジェクトマネージャーに最後まで残るたった一つの仕事は交渉
ichimichi
1
180
【ClickHouseMeetup】ClickHouseを活用したセキュリティログ解析AIエージェント『LogEater』とは
hssh2_bin
0
120
Monorepo Error Management: Automated Runbooks and Team-Targeted Alert Distribution
biwashi
1
110
Spring for GraphQLって実際どうなの?〜小規模スタートアップの事例紹介〜
kogayushi
0
160
20250514_未経験から Fintech実務参画まで。学生エンジニアの挑戦録
hideto1008
0
880
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.6k
Oracle Cloud Infrastructure IaaS 新機能アップデート 2025/03 - 2025/05
oracle4engineer
PRO
1
130
AIとSREの未来 / AI and SRE
ymotongpoo
2
1.8k
Java 30周年記念! Javaの30年をふりかえる
skrb
4
2.7k
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
270
CloudBruteによる外部からのS3バケットの探索・公開の発見について / 20250605 Kumiko Henmi
shift_evolve
3
360
メルカリにおけるデータアナリティクス AI エージェント「Socrates」と ADK 活用事例
na0
15
7.6k
Featured
See All Featured
Site-Speed That Sticks
csswizardry
9
620
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
228
22k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
25
2.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.6k
The Power of CSS Pseudo Elements
geoffreycrofte
76
5.8k
Speed Design
sergeychernyshev
30
980
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.3k
The Cult of Friendly URLs
andyhume
78
6.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
106
19k
Fireside Chat
paigeccino
37
3.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
A better future with KSS
kneath
239
17k
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