์ด ๊ธฐ์ฌ์ ํธ์ง๋์ง ์์ ๋ฒ์ ์ ์๋ ๋ค์ ์์น์ ๊ฒ์๋์์ต๋๋ค.
์ฒ๋ฆฌ๋์ ๋๋ฆฌ๊ณ ๋๊ธฐ ์๊ฐ์ ์ค์ด๋ฉฐ CPU์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณด๋ค ์ผ๊ด๋๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด PHP-FPM์ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ ์ค๋ช ํ๊ฒ ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก PHP-FPM์ PM(ํ๋ก์ธ์ค ๊ด๋ฆฌ์) ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋์ , ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ฉด ์ค์นํ๋ ๊ฒ์ด ์ข์ต๋๋ค ์ฃผ๋ฌธํ. php.net ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก 2๊ฐ์ง ์ ์ด ์ต์ ์ ๋น๊ตํ๊ณ ๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ต์ ์ด ์ด๋ค๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ ์ ์ธ ๋๋ ํธ๋ํฝ์ ๊ฒฝ์ฐ ์คํ:
์คํ = ๋์ โ ํ์ ํ๋ก์ธ์ค์ ์๋ ๋ค์ ์ง์์ด์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. pm.max_children, pm.start_servers,pm.min_spare_servers, pm.max_spare_servers.
์คํ = ์ฃผ๋ฌธํ - ํ๋ก์ธ์ค๋ ์์ฒญ ์ ์์ฑ๋ฉ๋๋ค(๋์ ์์ฑ๊ณผ ๋ฐ๋๋ก ์๋น์ค๊ฐ ์์๋ ๋ pm.start_servers๊ฐ ์์๋ ๋).
์คํ = ์ ์ โ ํ์ ํ๋ก์ธ์ค์ ์๋ ๊ณ ์ ๋์ด ์์ผ๋ฉฐ ๋งค๊ฐ๋ณ์๋ก ํ์๋ฉ๋๋ค. pm.max_children.
์์ธํ ๋ด์ฉ์ ๋ค์์ ์ฐธ์กฐํ์ธ์.
PHP-FPM ํ๋ก์ธ์ค ๊ด๋ฆฌ์์ CPU ์ฃผํ์ ์ปจํธ๋กค๋ฌ์ ์ ์ฌ์
์ฃผ์ ์์ ๋ฒ์ด๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์๋ ์์ง๋ง PHP-FPM ๊ตฌ์ฑ ์ฃผ์ ์ ์ฐ๊ฒฐํ๊ฒ ์ต๋๋ค. ๋ฉํฑ, ๊ฐ์ ๋จธ์ ๋๋ ์ ์ฉ ์๋ฒ์์ ํ๋ก์ธ์ ์๋ ์ ํ๋ฅผ ํ ๋ฒ๋ ๊ฒฝํํ์ง ์์ ์ฌ๋. CPU ์ฃผํ์ ์ค์ผ์ผ๋ง์ ๊ธฐ์ตํ์๋์? ์ด ์ต์ ์ ๋ค์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. nix์ Windows๋ ํ๋ก์ธ์ ์ค๋กํ ์ค์ ์ ๋ณ๊ฒฝํ์ฌ ์์คํ ์ฑ๋ฅ๊ณผ ์๋ต์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ฃผ๋ฌธํ ์ ์ฑ๋ฅ*. ์ด๋ฒ์๋ ์ค๋ช ์ ๋น๊ตํ๊ณ ์ ์ฌ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ฑฐ๋ฒ๋=์์ฒญ ์ โ ํ์ฌ ๋ก๋์ ๋ฐ๋ผ ํ๋ก์ธ์ ์ฃผํ์๋ฅผ ๋์ ์ผ๋ก ์กฐ์ ํฉ๋๋ค. ์ต๋ ๋น๋๋ก ๋น ๋ฅด๊ฒ ์ ํํ ๋ค์ ๋นํ์ฑ ๊ธฐ๊ฐ์ด ๊ธธ์ด์ง๋ฉด ๋น๋๋ฅผ ์ค์
๋๋ค.
์ฃผ์ง์ฌ=๋ณด์= ํ์ฌ ๋ถํ์ ๋ฐ๋ฅธ ๋์ ์ฃผํ์ ์ค์ผ์ผ๋ง. ์จ๋๋งจ๋๋ณด๋ค ์ฃผํ์๋ฅผ ๋ ์ํํ๊ฒ ๋๋ฆฌ๊ฑฐ๋ ์ค์
๋๋ค.
์ฃผ์ง์ฌ = ์ฑ๊ณผ โ ์ฃผํ์๋ ํญ์ ์ต๋์
๋๋ค.
์์ธํ ๋ด์ฉ์ ๋ค์์ ์ฐธ์กฐํ์ธ์.
์ ์ฌ์ ์ด ๋ณด์ด๋์? ๋๋ ์ด๊ฒ์ด ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค๋ ๊ฒ์ ๋น์ ์๊ฒ ํ์ ์ํค๊ธฐ ์ํด ์ด ๋น๊ต๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ถ์์ต๋๋ค. ์คํ ์ ์ PHP-FPM์ฉ.
ํ๋ก์ธ์ ์กฐ์ ๊ธฐ ๋งค๊ฐ๋ณ์์ ๊ฒฝ์ฐ ์ฑ๋ฅ ์๋ฒ์ CPU ์ ํ์ ๊ฑฐ์ ์ ์ ์ผ๋ก ์์กดํ๊ธฐ ๋๋ฌธ์ ์์ ํ๊ฒ ์ฑ๋ฅ์ ๋์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ฌผ๋ก ์ด ์ธ์๋ ์จ๋, ๋ฐฐํฐ๋ฆฌ ์ถฉ์ (๋
ธํธ๋ถ์ ๊ฒฝ์ฐ) ๋ฐ ํ๋ก์ธ์๋ฅผ 100%๋ก ์ง์์ ์ผ๋ก ์คํํ๋ ๋ฐ ๋ฐ๋ฅธ ๊ธฐํ ๋ถ์์ฉ๊ณผ ๊ฐ์ ์์ธ๋ ์์ต๋๋ค. ์ฑ๋ฅ ์ค์ ์ ๊ฐ์ฅ ๋น ๋ฅธ ํ๋ก์ธ์ ์ฑ๋ฅ์ ๋ณด์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ ๋ด์ฉ์ ์ฝ์ด๋ณด์ธ์.
pm static์ ์ฌ์ฉํ์ฌ ์ต๋ ์๋ฒ ์ฑ๋ฅ ๋ฌ์ฑ
PHP-FPM ์ต์ ์คํ ์ ์ ์๋ฒ์ ์ฌ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ฌ๋ผ์ง๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ฉด ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค ์ฃผ๋ฌธํ ๋๋ ๋์ . ๋ฐ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ pm์ ์ค์ ํ์ฌ PHP ํ๋ก์ธ์ค ๊ด๋ฆฌ์ ์ค๋ฒํค๋๋ฅผ ํผํ ์ ์์ต๋๋ค. ์ ์ ์ธ ์ต๋ ์๋ฒ ์ฉ๋๊น์ง. ์ฆ, ๋ชจ๋ ๊ฒ์ด ์ ๊ณ์ฐ๋์๋ค๋ฉด ๋ค์์ ์ค์ ํด์ผ ํฉ๋๋ค. ์คํ.์ ์ ์คํํ ์ ์๋ PHP-FPM ํ๋ก์ธ์ค์ ์ต๋ ๋ณผ๋ฅจ, ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ด๋ ์บ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ธ์๋ฅผ ์๋ํ๊ณ ์คํ์ ๊ธฐ๋ค๋ฆฌ๋ ๋ง์ PHP-FPM ์์ ์ ์ถ์ ํ ์ ๋๋ก ๋์ง๋ ์์ต๋๋ค..
์ ์คํฌ๋ฆฐ์ท์์ ์๋ฒ๋ pm = ์ ์ ๋ฐ pm.max_children = 100, ์ด๋ ์ฌ์ฉ ๊ฐ๋ฅํ 10GB ์ค ์ฝ 32GB๋ฅผ ์ฐจ์งํฉ๋๋ค. ๊ฐ์กฐ ํ์๋ ์ด์ ์ฃผ์ํ์ธ์. ์ฌ๊ธฐ์์๋ ๋ชจ๋ ๊ฒ์ด ๋ช ํํฉ๋๋ค. ์ด ์คํฌ๋ฆฐ์ท์๋ Google Analytics์ ์ฝ 200๋ช ์ ํ์ฑ ์ฌ์ฉ์(60์ด ์ด์)๊ฐ ์์์ต๋๋ค. ์ด ์์ค์์๋ PHP-FPM ํ์ ํ๋ก์ธ์ค์ ์ฝ 70%๊ฐ ์ฌ์ ํ ์ ํด ์ํ์ ๋๋ค. ์ฆ, PHP-FPM์ ํ์ฌ ํธ๋ํฝ์ ๊ด๊ณ์์ด ํญ์ ์ต๋ ์๋ฒ ๋ฆฌ์์ค ์์ผ๋ก ์ค์ ๋ฉ๋๋ค. ์ ํด ํ๋ก์ธ์ค๋ ํธ๋ํฝ์ด ์ต๊ณ ์กฐ์ ๋ฌํ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์ฆ์ ์๋ตํฉ๋๋ค. ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋ฉ๋๋ค. pm ํ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ๋ค์ ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋๋ฉด ์ข ๋ฃํฉ๋๋ค. pm.process_idle_timeout. ๊ฐ์ ์์ฃผ ๋๊ฒ ์ค์ ํ์ด์ pm.max_requests์๋ํ๋ฉด ์ด๊ฒ์ PHP์์ ๋ฉ๋ชจ๋ฆฌ ๋์ ์์ด ์๋ํ๋ ์๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ค์นํ ์ ์์ต๋๋ค pm.max_requests = 0 ๊ธฐ์กด ๋ฐ ํฅํ PHP ์คํฌ๋ฆฝํธ์ ์์ ํ ํ์ ์ด ์๋ค๋ฉด static์ ์ฌ์ฉํ์ธ์. ๊ทธ๋ฌ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ ์คํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ถํ์ํ pm ๋น์ฉ์ ํผํ๊ธฐ ์ํด ๋ง์ ์์ฒญ์ ์ค์ ํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ์ ์ด๋ pm.max_requests = 1000 - ์๋์ ๋ฐ๋ผ pm.max_children ์ด๋น ์์ฒญ ์.
์คํฌ๋ฆฐ์ท์ ๋ช
๋ น์ ๋ณด์ฌ์ค๋๋ค.
top -bn1 | grep php-fpm
pm ondemand ๋ฐ ๋์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
์คํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋์ , ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children
๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํด ๋ณด์ญ์์ค. ๋ค์๊ณผ ๊ฐ์ด ์ค๋ฅ๊ฐ ์ฌ๋ผ์ง์ง ์์ต๋๋ค.
PM ๋์ ํนํ ์ฃผ๋ฌธํ PHP-FPM ํ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ์ ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ๋ฌ cPanel ๊ณ์ ์ ํธ์คํ ํ๊ฑฐ๋ ์ฌ๋ฌ ํ์์ ์ฌ๋ฌ ์น์ฌ์ดํธ๋ฅผ ํธ์คํ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด 100๊ฐ๊ฐ ๋๋ cpanel ๊ณ์ ๊ณผ ์ฝ 200๊ฐ์ ๋๋ฉ์ธ์ด ์๋ ์๋ฒ๊ฐ ์๋๋ฐ pm.static ๋๋ ์ฌ์ง์ด ๋์ ์ผ๋ก๋ ์ ์ฅ๋์ง ์์ต๋๋ค. ์ฌ๊ธฐ์ ํ์ํ ๊ฒ์ ์ฃผ๋ฌธํ๊ฒฐ๊ตญ ์น์ฌ์ดํธ์ XNUMX/XNUMX ์ด์์ด ํธ๋ํฝ์ด ๊ฑฐ์ ๋๋ ์ ํ ๋ฐ์ํ์ง ์์ต๋๋ค. ์ฃผ๋ฌธํ ๋ชจ๋ ํ์ ํ๋ก์ธ์ค๊ฐ ์ค๋จ๋์ด ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ฝ๋ฉ๋๋ค! ๋คํํ cPanel ๊ฐ๋ฐ์๋ ์ด๋ฅผ ์์์ฐจ๋ฆฌ๊ณ ๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ์ต๋๋ค. ์ฃผ๋ฌธํ. ์ด์ ์๋ ๊ธฐ๋ณธ๊ฐ์ด ๋์ , PHP-FPM์ ์ฌ์ฉ๋์ด ๋ง์ ๊ณต์ ์๋ฒ์๋ ์ ํ ์ ํฉํ์ง ์์์ต๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉํ์ต๋๋ค. suPHP, ์คํ๋๊น ๋์ ์ ํด ํ ๋ฐ cPanel PHP-FPM ๊ณ์ ์ด ์์ด๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ์ต๋๋ค. ํธ๋ํฝ์ด ์ข์ผ๋ฉด PHP-FPM ํ์ด ๋ง์ ์๋ฒ(๊ณต์ ํธ์คํ )์์๋ ํธ์คํ ๋์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๊ฒฐ๋ก
PHP-FPM์ ์ฌ์ฉํ๊ณ ์๊ณ ํธ๋ํฝ์ด ๋ง์ ๊ฒฝ์ฐ ํ๋ก์ธ์ค ๊ด๋ฆฌ์ ์ฃผ๋ฌธํ ะธ ๋์ PHP-FPM์ ๊ฒฝ์ฐ ๊ณ ์ ํ ์ค๋ฒํค๋๋ก ์ธํด ์ฒ๋ฆฌ๋์ด ์ ํ๋ฉ๋๋ค. ์์คํ ์ ์ดํดํ๊ณ ์ต๋ ์๋ฒ ์ฉ๋์ ๋ฐ๋ผ PHP-FPM ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ์ญ์์ค. ์ฒซ ๋ฒ์งธ ์ธํธ pm.max_children ์ต๋ ์คํ ์ฌ์ฉ๋์ ๋ฐ๋ผ ๋์ ๋๋ ์ฃผ๋ฌธํ, ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก์ธ์๊ฐ ๊ณผ๋ถํ๋์ง ์๊ณ ์๋ํ ์ ์๋ ์์ค๊น์ง ์ด ๊ฐ์ ๋๋ฆฝ๋๋ค. ๋น์ ์ ๊ทธ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค ์คํ ์ ์ , ๋ฉ๋ชจ๋ฆฌ์ ๋ชจ๋ ๊ฒ์ด ์์ผ๋ฏ๋ก ํธ๋ํฝ ๊ธ์ฆ์ผ๋ก ์ธํด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ CPU ๊ธ์ฆ์ด ์ค์ด๋ค๊ณ ์๋ฒ ๋ฐ CPU ๋ก๋ ํ๊ท ์ด ํ์คํ๋ฉ๋๋ค. ํ๊ท PHP-FPM ํ๋ก์ธ์ค ํฌ๊ธฐ๋ ์น ์๋ฒ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ ์๋ ๊ตฌ์ฑ์ด ํ์ํ๋ฏ๋ก ๋ณด๋ค ์๋ํ๋ ํ๋ก์ธ์ค ๊ด๋ฆฌ์๊ฐ ํ์ํฉ๋๋ค. ๋์ ะธ ์ฃผ๋ฌธํ - ๋ ์ ๋ช ํ. ์ด ๊ธฐ์ฌ๊ฐ ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
UPD ๋ฒค์น๋งํฌ ์ฐจํธ ์ถ๊ฐ
์ถ์ฒ : habr.com