"์ฌ์ฉ์๊ฐ ๋ชฐ๋ฆฌ๋ฉด ์๋ฒ๊ฐ ์๋ต์ด ์์ด์." ์ด๋ฐ ๋ฌธ์ ์ 90%๋ ๋์ ์ ์์ ์ฒ๋ฆฌ ์ค์ ์ธ MPM(Multi-Processing Module) ํ๋์ผ๋ก ํด๊ฒฐ๋ฉ๋๋ค. ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ํ๊ณ ๋ด์์ ์ต๋ ์ฑ๋ฅ์ ๋์ด๋ด๋
MaxRequestWorkers์ค์ ๋ฒ๊ณผServerLimit์ ๊ด๊ณ๋ฅผ ๋จ๊ณ๋ณ๋ก ์ ๋ฆฌํฉ๋๋ค.
0. ํ๋์ ํต์ฌ ๊ณต์ (The Formula)
ํ๋์ '๊ฐ'์ผ๋ก ํ๋ ๊ฒ์ด ์๋๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ์ธํ ์ค์(Swap) ๋ฐ์์ ๋ง๋ ๊ฒ์ด ์ต์ฐ์ ๋ชฉํ์ด๋ฉฐ, ์ด๋ ์ ํํ ๊ณ์ฐ์์ ์์๋ฉ๋๋ค.
1. 3๋จ๊ณ ๊ณ์ฐ๋ฒ: ๋ด ์๋ฒ์ ํ๊ณ๊ฐ ์ฐพ๊ธฐ
Step 1: Apache ํ๋ก์ธ์ค ํ๊ท ๋ฉ๋ชจ๋ฆฌ ์ธก์
๋จผ์ , ํ์ฌ ๊ตฌ๋ ์ค์ธ httpd(๋๋ apache2) ํ๋ก์ธ์ค ํ๋๊ฐ ์ค์ ๋ก ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ(RSS)์ ํ๊ท ์ ๊ตฌํฉ๋๋ค.
# SSH ์ ์ ํ ์คํ (๊ฒฐ๊ณผ ๋จ์: MB)
ps -ylC httpd --sort:rss | awk '{sum+=$8; ++n} END {print "Average RSS: " sum/n/1024 " MB"}'
(์์ ๊ฒฐ๊ณผ: 45.5 MB)
Step 2: Apache ๊ฐ์ฉ RAM ์ฐ์
์๋ฒ์ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ์์ OS์ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ (DB ๋ฑ)์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ธํฉ๋๋ค.
# ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ํ์ธ
free -m
(์์: 16GB ์๋ฒ์์ OS/DB๊ฐ 6GB ์ฌ์ฉ ์ค -> Apache์ฉ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ 10GB (10,240 MB))
Step 3: ์ต์ข ์ค์ ๊ฐ ๋์ถ
์์์ ๊ตฌํ ๊ฐ์ ๊ณต์์ ๋์ ํฉ๋๋ค.
- ๊ณ์ฐ:
10,240 MB / 45.5 MB = 225.05 - ๊ฒฐ๋ก : ์์์ ์ ๋ฒ๋ฆฌ๊ณ 225๋ฅผ
MaxRequestWorkers๊ฐ์ผ๋ก ์ ์ ํฉ๋๋ค.
2. ๋ณด์ด์ง ์๋ ๋ฒฝ: Limit ์ง์์ด์ ์ดํด
MaxRequestWorkers ๊ฐ๋ง ๋์ธ๋ค๊ณ ๋์ด ์๋๋๋ค. ์ด ๊ฐ์ ์์ ์ ํ(Hard Limit) ์ค์ ์ธ ServerLimit๊ณผ ThreadLimit ์์์๋ง ์ ํจํฉ๋๋ค.
- ๊ท์น:
MaxRequestWorkers≤ (ServerLimit×ThreadsPerChild)
๋ง์ฝ ๊ณ์ฐ๋ ๊ฐ์ด ๊ธฐ๋ณธ ํ๊ณ(๋ณดํต ServerLimit 16)๋ฅผ ์ด๊ณผํ๋ค๋ฉด, ๋ฐ๋์ ์ค์ ํ์ผ์ ServerLimit์ ๋ช
์ํด์ผ ํฉ๋๋ค.
3. ํ๋ ์ ๋ต: ์์ ์ฑ vs ํจ์จ์ฑ
Event/Worker MPM์ ์ฌ์ฉํ ๋, ์ฑ๋ฅ์ ๋์ด๋ ๋ฐฉํฅ์ ๋ ๊ฐ์ง์ ๋๋ค.
| ๊ตฌ๋ถ | ServerLimit ์ฆ๊ฐ (ํ๋ก์ธ์ค ↑) | ThreadsPerChild ์ฆ๊ฐ (์ค๋ ๋ ↑) |
|---|---|---|
| ์์ ์ฑ | ๋์ (ํ๋๊ฐ ์ฃฝ์ด๋ ๋๋จธ์ง๋ ์์กด) | ๋ฎ์ (์ค๋ ๋ ํ๋๊ฐ ์ฃฝ์ผ๋ฉด ํ๋ก์ธ์ค ์ ์ฒด ๋ค์ด) |
| ๋ฉ๋ชจ๋ฆฌ ํจ์จ | ๋ฎ์ (๋ ๋ฆฝ ๋ฉ๋ชจ๋ฆฌ ํ์) | ๋์ (๋ฉ๋ชจ๋ฆฌ ๊ณต์ ) |
| ๊ถ์ฅ | ✅ ์ ๊ทน ๊ถ์ฅ | ⚠️ ์ ์คํ ์ ๊ทผ ํ์ (๋ณดํต 25~64 ๊ณ ์ ) |
4. ์ต์ข ์ค์ ์์ (httpd.conf)
์์ ๊ณ์ฐ ๊ฒฐ๊ณผ(MaxRequestWorkers 1000 ๊ฐ์ )๋ฅผ ๋ฐํ์ผ๋ก ํ Event MPM ์ต์ข ์ค์ ์์์ ๋๋ค.
<IfModule mpm_event_module>
# 1. ์ค๋ ๋ ์๋ ์์ ์ ์ธ ๊ฐ์ผ๋ก ๊ณ ์ (25)
ThreadsPerChild 25
# 2. ํ์ํ ํ๋ก์ธ์ค ์ ๊ณ์ฐ (1000 / 25 = 40)
# ๊ธฐ๋ณธ๊ฐ(16)๋ณด๋ค ํฌ๋ฏ๋ก ๋ฐ๋์ ๋ช
์ํด์ผ ํจ
ServerLimit 40
# 3. ๋ชฉํ ๋์ ์ฒ๋ฆฌ ์ (40 * 25 = 1000)
MaxRequestWorkers 1000
# 4. ๊ธฐํ ํ๋ก์ธ์ค ๊ด๋ฆฌ ์ต์
StartServers 4
MinSpareThreads 75
MaxSpareThreads 250
MaxConnectionsPerChild 0
</IfModule>
apachectl -t ๋๋ httpd -t ๋ช
๋ น์ด๋ก ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํ๊ณ ์ฌ๊ธฐ๋ํด์ผ ํฉ๋๋ค.