Slide 1

Slide 1 text

php-fpm Λͪΐͬͱνϡʔχϯάͯ͠ ΈΑ͏ • Yuichiro Saito (@koemu) • 2017-02-22 @ ϝϧΧϦ ౦ژΦϑΟε © Yuichiro Saito (koemu), 2017 1

Slide 2

Slide 2 text

ࠓ೔ͷ͓࿩ • php-fpm ͷࢠϓϩηε਺Λվળͯ͠ΈΑ͏ • ࢖͍ͬͯΔΠϯελϯεͷੑೳΛҾ͖ग़ͦ͏ • (νϡʔχϯάೖ໳ͷ͓࿩Ͱ͢) © Yuichiro Saito (koemu), 2017 2

Slide 3

Slide 3 text

લఏ৚݅ ؀ڥ 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

Slide 4

Slide 4 text

Լ४උ $ sudo apt-get install apache2-utils htop ஫ҙ: ຊ౰͸ ab Λ࣮ߦ͢Δαʔό͸෼͚ͨ΄͏͕͍͍Ͱ͢ɻࠓ ճ͸؆қతͳܗͰ঺հ͠·͢ɻ © Yuichiro Saito (koemu), 2017 4

Slide 5

Slide 5 text

σϑΥϧτͰ࢖ͬͯ·ͤΜ͔ʁ 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

Slide 6

Slide 6 text

σϑΥϧτͷ··ͩͱ • ىಈϓϩηε਺͸2ɻ • ࠷େϓϩηε਺͕5ɻ ͦͯ͠ • ϓϩηε͸ಈతʹ૿ݮ͢Δɻ ͋ͳͨͷ࡞ͬͨΞϓϦɺ͜ΕͰੑೳग़·͔͢Ͷʁ © Yuichiro Saito (koemu), 2017 6

Slide 7

Slide 7 text

΋͍ͬͨͳ͍ʂʂʂʂ © Yuichiro Saito (koemu), 2017 7

Slide 8

Slide 8 text

ϓϩηε਺Λௐ੔ͯ͠ΈΔ © Yuichiro Saito (koemu), 2017 8

Slide 9

Slide 9 text

ࢼ͠ʹܭଌͯ͠ΈΔ ୯७ͳ 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

Slide 10

Slide 10 text

5Ͱݶ౓ʁ pm.max_children = 5 Ͱઃఆͨ͠஋Ͱ಄ଧͪͰ͢Ͷɻ © Yuichiro Saito (koemu), 2017 10

Slide 11

Slide 11 text

͜͜Ͱฤू 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

Slide 12

Slide 12 text

มߋՕॴʹ͍ͭͯ pm = static • ࢠϓϩηεΛಈతʹ૿ݮ͢ΔͷͰ͸ͳ͘ɺݻఆʹ͠·͢ɻ • ಈ͘ΞϓϦέʔγϣϯܾͬͯ·ͬͯ·͢ΑͶʁ • ܾ·͍ͬͯΔͷͳΒɺ࠷ॳ͔Βݻఆͨ͠΄͏͕૿ݮͷΦʔόʔϔου͸ݮΒͤ·͢ΑͶɻ pm.max_children = 10 • ࢠϓϩηε਺ • 10ʹઃఆ • ͜ͷ஋͕Ռͨͯ͠ ద੾ ͔͕ࠓճͷϙΠϯτʂ © Yuichiro Saito (koemu), 2017 12

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

…ɺ͋Μ·มΘΒͳ͍Ͱ͢Ͷɻ © Yuichiro Saito (koemu), 2017 14

Slide 15

Slide 15 text

࣮͸…ฒྻ਺3࣌: CPUΛ΄΅࢖͍੾͍ͬͯΔ © Yuichiro Saito (koemu), 2017 15

Slide 16

Slide 16 text

͸͍ɻ © Yuichiro Saito (koemu), 2017 16

Slide 17

Slide 17 text

Ͱ͸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

Slide 18

Slide 18 text

ͳͥॲཧͰ͖ΔΑ͏ʹͳͬͨͷ͔ʁ • ࠓ·Ͱ: ϓϩηε਺ > ίΞ਺ • ͋Δϓϩηε͕CPUΛѲ͍ͬͯΔͱɺ΄͔ͷϓϩηε͸ॲཧ͕Ͱ͖ͳ͍ɻ • ࠷ॳ͸2vCPU→2ϓϩηεʴαఔ౓͕ॲཧͷݶ౓ɻ • c4.4xlarge ʹมߋ: ϓϩηε਺ < ίΞ਺ • Ͳ͔͜ͷCPUίΞ͕ۭ͍͍ͯΔɻ • 10ϓϩηε·ͰىಈͰ͖ΔΑ͏ʹ͍ͯ͠ΔͷͰɺ16ίΞͷͲΕ͔Λࣗ༝ʹಠ઎͠ ͯ࢖͑Δঢ়ଶͰ͋ΓɺଞͷϓϩηεͷऴྃΛ଴ͭඞཁ͕ͳ͘ͳΔɻ • 1ϓϩηε͋ͨΓͷੑೳΛҾ͖ग़ͤΔΑ͏ʹͳͬͨɻ © Yuichiro Saito (koemu), 2017 18

Slide 19

Slide 19 text

Ͱ͸ࠓͷઃఆͰͲ͜·Ͱߦ͚Δ͔ʁ $ 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

Slide 20

Slide 20 text

CPU΋༨༟͋Γͦ͏ © Yuichiro Saito (koemu), 2017 20

Slide 21

Slide 21 text

Ͱ͸ 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

Slide 22

Slide 22 text

͔͠͠CPU͸ ·ͩ༨༟͕͋ΔΜͰ͢ © Yuichiro Saito (koemu), 2017 22

Slide 23

Slide 23 text

Ͱ͸ 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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

CPU΋͋Δఔ౓࢖͍͑ͯ·͢Ͷ © Yuichiro Saito (koemu), 2017 25

Slide 26

Slide 26 text

࣮ࡍӡ༻͍ͯͯ͠ؾʹ͍ͯ͠Δ͜ͱ • զ͕ՈͷWordpressͷࣄྫ © Yuichiro Saito (koemu), 2017 26

Slide 27

Slide 27 text

࣮ࡍͷϝϞϦ࢖༻ྔͱCPU࢖༻ྔ © Yuichiro Saito (koemu), 2017 27

Slide 28

Slide 28 text

PHP 5.4→PHP 7.0ʹΞοϓσʔτͨ࣌͠ ϝϞϦ࢖༻ྔ͕͙ͬͱݮΔ © Yuichiro Saito (koemu), 2017 28

Slide 29

Slide 29 text

஫ҙͨ͜͠ͱ • CPU͸εΧεΧͳͷ͕ͩɺϝϞϦΛΑ͘৯͍ͬͯΔɻ • ϓϩηε਺Λ૿΍͗͢͠ΔͱɺCPUΑΓ΋ϝϞϦͷ࢒ྔ͕଍Γͳ͘ͳͬͨɻ • ϝϞϦͷ࢒ྔΛݟͳ͕Βϓϩηε਺Λ૿΍͢ඞཁ͕͋ͬͨɻ • ಛʹϝϞϦ౥ࡌྔ͕গͳ͍VPS͸ཁ஫ҙɻ • ࣮ࡍɺଌఆ݁ՌΛجʹͨ͠ઃఆͰ͍͍͔͸ܧଓతͳϞχλϦϯά͕ඞཁɻ • ಛʹɺϝϞϦͷಈ޲͸௕࣌ؒಈ͔͞ͳ͍ͱΘ͔Βͳ͍͜ͱ΋͋Δɻ • Wordpress͸ɺ؅ཧը໘Λ্ཱͪ͛ΔͱΑΓϝϞϦΛফඅ͢Δɻ • ͨͩ୯ʹӡ༻͍ͯͯ͠͸ͩΊɻ͍Ζ͍ΖͳγφϦΦΛࢼ͢ɻ © Yuichiro Saito (koemu), 2017 29

Slide 30

Slide 30 text

·ͱΊ • php-fpmΛσϑΥϧτͰ࢖͏͜ͱ͔Β୤٫ͯ͠ΈΑ͏ • php-fpmͷϓϩηε਺͸CPUίΞ਺*2͘Β͍͕·ͣ͸໨҆ • ଌΔͱ͖͸topΛΈͳ͕Β΍Δ͜ͱ • ͪͳΈʹApache+mod_phpͰ΋ಉ͡ख๏͕࢖͑·͢ © Yuichiro Saito (koemu), 2017 30