์ด ํ์ด์ผ.
์ด๊ฑธ ์งํํ๊ธฐ ์ ์, ์ฐ๋ฆฌ๊ฐ ๋จผ์ ์๋ฒ์ ๋ํด์ ํ์ธํด์ผ ํ ์ฌํญ์ด ์๋ค.
์ง๊ธ๋ถํฐ ์๋์ ์๋ ์ํฉ๋ค์, ์๋ฒ ์์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํค์ฐ๊ฑฐ๋, ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ปค์ ธ๋ ์ฃฝ์ง ์๊ฒ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด ์ด์ ์, ๋ด ํ๋ก์ ํธ ์์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ ์ด์์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์๋๊ฐ ํ์ธํ๊ณ ์งํํด์ผ ํ๋ค๋ ์ ์ ์๊ฐํด์ผ ํ๋ค.
๋์ปค๋ก ํ๋ก์ ํธ๋ฅผ ์ฌ๋ ธ๋ค.
๊ทผ๋ฐ ๊ณ์ ํฐ์ก๋ค.
๋ถ๋ช ์ ๋๋๋ฐ? ๋ถ๋ช ๋ฌธ์ ์์๋๋ฐ? ๋ถ๋ช ์ปดํ์ผํ๊ณ ์คํํ๋๋ฐ ์๋ฌ๊ฐ ์๋๋ฐ ์ ๊บผ์ง๊น?
์คํ์ํค๊ณ ์จ๊ฐ ์์ฒญ์ ํ ๋ docker logs ${container}
๋ก ๋ก๊ทธ๋ฅผ ๋ณด์์ง๋ง ์๋ฌด๋ฐ ์๋ฌ๊ฐ ์์๋ค.
๋์ปค ์ ์ฒด ๋ก๊ทธ๋ฅผ ๋ดค์ง๋ง ๋ฌธ์ ๊ฐ ์์๋ค.
ํํํ ๋๋ฌด ์ฆ๊ฒ๋ค.
์์ธ ๋ถ์์ ์ํด 3๋จ๊ณ๋ก ๋๋ฒ๊น ์คํ (?)์ ๋ง๋ค์ด๋ณด์๋ค.
์๋ฒ๊ฐ ๋ฌธ์ ๋ผ๋ฉด ๋ถ๋ช ์ด์ ์ docker logs๋ก ํ์ธ์ด ๋์ด์ผ ํ๋ค. ํ์ง๋ง ๋ฌธ์ ๊ฐ ์์๋ค.
๊ทธ๋์ ๋์ปค ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด์๋ค.
cat /var/log/docker.log
๊ทผ๋ฐ ์ด๊ฒ๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์๋ค.
์๋ฌ๊ฐ ๋ช ์๋ ์ ์ด ์์๋ค.
์ด์ ์๋ฒ๋ฅผ ๊ฑด๋๋ ค๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์๋ฒ๊ฐ ๊บผ์ง๋ ์ด์ ๋ฅผ ์๊ฐํด๋ณด์๋ค.
์ด๊ฒ์ ๊ฒ ์กฐ์ฌํด๋ณด๋ ์ด๋ฐ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ๊ฒ ๋์๋ค.
์ด๋ฅผ ์ํ ๊ฐ์์ ์ฒ๋ฆฌ๊ณผ์ ์ ์๊ฐํด๋ณด์๋ค.
์ด๋ฐ ๋ ๊ฐ์ง ๊ณผ์ ์ ์งํํ๋ค.
์ผ๋จ ์ค์๋ฉ๋ชจ๋ฆฌ๋ ๋ญ๊น??
์ฐ๋ฆฌ์ ํ๋๋์คํฌ๊ฐ์, ์ค์ ์ ์ฅ ์ฅ์น๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๊ฑฐ๋, ์ถ๊ฐ์ ์ธ ํ์๋์ ๋ง๋ค๊ธฐ ์ํด์ ํ๋๋์คํฌ์ ์ผ๋ถ๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ก ํ ๋น์ํค๊ณ ,
๋ฉ๋ชจ๋ฆฌ๋ก๋ง ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
์ด๊ฑธ ์ด๋ป๊ฒ ์ธ๊น?
// ์ค์ํ์ผ ์์ฑ ๋ฐ ํฌ๊ธฐ ๊ฒฐ์
sudo fallocate -l ${์ค์ํ์ผ ํฌ๊ธฐ} /swapfile
// ๋ฃจํธ ์ฌ์ฉ์๋ง ์ฝ๊ณ ์ฐ๊ฒ ํ ์ ์๊ฒ ํ๋ค.
sudo chmod 600 /swapfile
// ์ค์์์ญ์ผ๋ก ์๊น ์ ํ ํฌ๊ธฐ๋งํผ์ ํ ๋น(์ ์ธํ๋ค!)
sudo mkswap /swapfile
// ์์คํ
์ ์ค์ ํ์ผ์ ํ์ฑํํ๋ค.
sudo swapon /swapfile
// ์๋ฒ๊ฐ ๊บผ์ก๋ค ์ผ์ ธ๋ ์ค์ํ์ผ์ด ํ์ฑํ๋๊ฒ ์ค์
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
๋ถํ๋ก ์ค์ ํธ๋ํฝ์ ์ต๋๋ก ๋ฐ์์ ๋, ๋ฐ์ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ด์์ ์ฑ๋ฅ์ ๊ฐ์ง ์ ์๊ฒ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง๊ฒ ๋์๋ค.
๊ทผ๋ฐ ์ด๋ ๊ฒ ํด๋ ํฐ์ก๋ค...
์ฌ๊ธฐ์ OOM์ ๋ฐ๋ก ์๊ฐํ์ง ๋ชปํ๋ค(์ฌ์ค ์ ๊ฒ ๋ญ์ง๋ ๋ชฐ๋๋ค)
์์ ์ค๋ธ ๋ฉ๋ชจ๋ฆฌ, ๋ง ๊ทธ๋๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ผ์ ์น๋ฅผ ๋์ด๊ฐ์ out๋์๋ค๋ ๋ป์ด๋ค.
์ด์์ฒด์ ์์ฒด์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๋, ํด๋น ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ข ๋ฃํ๊ฒ ๋๋ ์ผ์ด์ค์ด๋ค.
ํ์ง๋ง, ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๋ถ๋ช CPU๊ฐ ๊ฝ ์ฐจ์ง ์์ ์ํ์์๋ OOM์ค์ฝ์ด๊ฐ ๋๋ค๋ฉด ์ถฉ๋ถํ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ ์ ์๋ค๋ ๋ป์ด์๋ค.
์ด๋ก์ธํ ๋ฌธ์ ๊ฐ ๋ญ๊น?
์ฐ๋ฆฌ์ ๋์ปค ํ๋ก์ธ์ค๊ฐ ๋ถ๋ช CPU๋ฅผ ์ ๋ถ ์ฐจ์งํ๊ณ ์๋ฒ์์ฒด๊ฐ ํฐ์ง ์ํ์ด ์๋(์ฐ๋ฆฌ ๊ธฐ์ค์ผ๋ก๋ CPU๋ฅผ 30ํผ์ผํธ๋ ๋จน์ง ์์์ ๋) ๋์ปค ์ปจํ ์ด๋ ์์ฒด๋ฅผ ๋ฆฌ๋ ์ค ์๋ฒ๊ฐ killํด๋ฒ๋ฆฌ๋, OOM KILL์ํ๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค.
์ด๋ฅผ ํ์ธํ๊ธฐ ์ํ ๋๋ง์ ์ฌ์ ์ ์ ๋ฆฌํด๋ณด์.
docker ps -a๋ก ์ ์ฒด๋ฅผ ํ์ธํด๋ณด์๋ค. ํ๋ก์ธ์ค์์ OOM kill์ ํ์ ๋ ์ปจํ ์ด๋๊ฐ ์์ ์ฌ๋ผ์ง ์ด์ํ ํ์(?)์ ๋ณด๊ณ , ์ด๊ฒ ๋์ปค์์ ์ข ๋ฃ๋๊ฒ์ด ์๋๊ฒ์ด๋ค๋ผ๊ณ ์ถ๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ , ๋์ปค ์ ์ฒด๋ฅผ ๋ก๊น ํด๋ณด์์ ๋, ๋์ปค ์์ฒด์์ ์ข ๋ฃ์ํค์ง ์์๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
ps aux | grep docker
์ด๋ฐ ๋ก์ง์ผ๋ก docker๋ผ๋ ์ด๋ฆ์ ํ๋ก์ธ์ค๋ฅผ ํ์ธํ๋ค.
ํ๋ก์ธ์ค๋ค ์ค์์, ์์์ ๋ ๋ฒ์งธ์ ์๋ ํ๋ก์ธ์ค์ oom ์ ์๋ฅผ ํ์ธํ๋ค.
์ด ๋ oom score์ -1000 ~ 1000๊น์ง ์กด์ฌํ๋ฉฐ, 1000์ ๊ฐ๊น์ธ ์๋ก ์ฃฝ๊ธฐ ์ฌ์ด ํ๋ก์ธ์ค๊ฐ ๋๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
cat /proc/${process_id}/oom_score
์ผ๋ก ์ ์๋ฅผ ํ์ธํ์ ๋, 1000์ ์ ๋์ ์๋ก ์ด์์ฒด์ ์์ ํ๋ก์ธ์ค๋ฅผ kill์ํฌ ์ฐ์ ์์๊ฐ ๋๋ค๋ ๊ฒ์ด๋ค.
์ด ๋ OOM Kill์ ๋ฐฉ์งํ๊ธฐ ์ํ ์กฐ์น๋ก, ํ๋ก์ธ์ค id๋ฅผ ๋ฎ์ถ๊ฑฐ๋, oom-kill-disabled๋ฅผ ์ค์ ํด์ค ์ ์์๋ค.
docker๋ก ๊ฐ๋จํ๊ฒ ๋ช ๋ น์ด๋ฅผ ์ค์ ํด์ค ์ ์์๋ค.
docker run --oom-kill-disable=true --restart unless-stopped -d -p 80:8080 ${container_name}
์ด๋ฐ์์ผ๋ก ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ค.
oom-kill-disable์ true๋ก ์ค์ ํด ์ด๊ฒ ์ฃฝ์ง ์๋๋ก ์ฒ๋ฆฌํ๋ค
(์ด๋ฐ์์ผ๋ก ํ๋ฉด ๋จ์ ์, ์ด๋ฅผ ์ ์งํ๋ค๊ฐ ์๋ฒ ์์ฒด๊ฐ ์ฃฝ์ด๋ฒ๋ฆด ์ํ์ด ์๋ค๋ ์ ์ด๋ค)
๋ํ, docker ์ปจํ ์ด๋๊ฐ ์ฃฝ์ด๋ฒ๋ ธ์ ๋, restart์ต์ ์ ๋์๋ค.