๋„์ปค๋ฅผ ๋˜์‚ด๋ ค๋ณด์ž!!(๊ฐœ๋ณต์น˜ ํ‚ค์šฐ๊ธฐ ๋„์ปคํŽธ)

์–ด ํ˜•์ด์•ผ.

Profile Picture
JangAJang
2023-12-13

์›๋ณธ

Before This

์ด๊ฑธ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์—, ์šฐ๋ฆฌ๊ฐ€ ๋จผ์ € ์„œ๋ฒ„์— ๋Œ€ํ•ด์„œ ํ™•์ธํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ๋‹ค.

  1. ํ”„๋กœ์ ํŠธ ์ž์ฒด์— ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ํ™•์ธํ•œ๋‹ค.
  2. ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด ๊ณผ๋„ํ•œ ๋ถ€๋ถ„์„ ์ตœ์ ํ™”ํ•œ๋‹ค.

์ง€๊ธˆ๋ถ€ํ„ฐ ์•„๋ž˜์— ์žˆ๋Š” ์ƒํ™ฉ๋“ค์€, ์„œ๋ฒ„ ์ž์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ‚ค์šฐ๊ฑฐ๋‚˜, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ปค์ ธ๋„ ์ฃฝ์ง€ ์•Š๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ด ์ด์ „์—, ๋‚ด ํ”„๋กœ์ ํŠธ ์ž์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•„์š” ์ด์ƒ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹Œ๊ฐ€ ํ™•์ธํ•˜๊ณ  ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.


๊ทธ๋Ÿฌ๋ฉด ์‹œ์ž‘ํ•ด๋ณด์ž

๋„์ปค๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์˜ฌ๋ ธ๋‹ค.

๊ทผ๋ฐ ๊ณ„์† ํ„ฐ์กŒ๋‹ค.

๋ถ„๋ช… ์ž˜ ๋๋Š”๋ฐ? ๋ถ„๋ช… ๋ฌธ์ œ ์—†์—ˆ๋Š”๋ฐ? ๋ถ„๋ช… ์ปดํŒŒ์ผํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š”๋ฐ ์—๋Ÿฌ๊ฐ€ ์—†๋Š”๋ฐ ์™œ ๊บผ์งˆ๊นŒ?

์‹คํ–‰์‹œํ‚ค๊ณ  ์˜จ๊ฐ– ์š”์ฒญ์„ ํ•  ๋•Œ docker logs ${container}๋กœ ๋กœ๊ทธ๋ฅผ ๋ณด์•˜์ง€๋งŒ ์•„๋ฌด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ์—†์—ˆ๋‹ค.

๋„์ปค ์ „์ฒด ๋กœ๊ทธ๋ฅผ ๋ดค์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค.

ํ•˜ํ•˜ํ•˜ ๋„ˆ๋ฌด ์ฆ๊ฒ๋‹ค.

์›์ธ ๋ถ„์„์„ ์œ„ํ•ด 3๋‹จ๊ณ„๋กœ ๋””๋ฒ„๊น… ์Šคํ…(?)์„ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.

  1. nestjs ์„œ๋ฒ„๊ฐ€ ๋ฌธ์ œ์ผ๊นŒ?
  2. ๋„์ปค๊ฐ€ ๋ฌธ์ œ์ผ๊นŒ?
  3. ์•„๋‹ˆ๋ฉด ์„œ๋ฒ„ ์ž์ฒด์˜ ๋ฌธ์ œ์ผ๊นŒ?

์„œ๋ฒ„๊ฐ€ ๋ฌธ์ œ๋ผ๋ฉด ๋ถ„๋ช… ์ด์ „์˜ docker logs๋กœ ํ™•์ธ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋„์ปค ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด์•˜๋‹ค.

cat /var/log/docker.log

๊ทผ๋ฐ ์ด๊ฒƒ๋„ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค.

์—๋Ÿฌ๊ฐ€ ๋ช…์‹œ๋œ ์ ์ด ์—†์—ˆ๋‹ค.

์ด์ œ ์„œ๋ฒ„๋ฅผ ๊ฑด๋“œ๋ ค๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์„œ๋ฒ„๊ฐ€ ๊บผ์ง€๋Š” ์ด์œ ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์•˜๋‹ค.

  • ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋” ์ž‘๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ Out Of Memory๊ฐ€ ํ„ฐ์กŒ๋‹ค.

์ด๊ฒƒ์ €๊ฒƒ ์กฐ์‚ฌํ•ด๋ณด๋‹ˆ ์ด๋Ÿฐ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•œ ๊ฐ์ž์˜ ์ฒ˜๋ฆฌ๊ณผ์ •์„ ์ƒ๊ฐํ•ด๋ณด์•˜๋‹ค.

  • ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ์ž‘๋‹ค?
    • ์Šค์™‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ๊นŒ?
  • Out of Memory?
    • oom-killer-disable์„ ํ•ด๋ณผ๊นŒ?

์ด๋Ÿฐ ๋‘ ๊ฐ€์ง€ ๊ณผ์ •์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

Swap Memory

์ผ๋‹จ ์Šค์™‘๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ญ˜๊นŒ??

์šฐ๋ฆฌ์˜ ํ•˜๋“œ๋””์Šคํฌ๊ฐ™์€, ์‹ค์ œ ์ €์žฅ ์žฅ์น˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๊ฑฐ๋‚˜, ์ถ”๊ฐ€์ ์ธ ํ•„์š”๋Ÿ‰์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ํ•˜๋“œ๋””์Šคํฌ์˜ ์ผ๋ถ€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ๋กœ ํ• ๋‹น์‹œํ‚ค๊ณ ,

๋ฉ”๋ชจ๋ฆฌ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ด๊ฑธ ์–ด๋–ป๊ฒŒ ์“ธ๊นŒ?

// ์Šค์™‘ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ํฌ๊ธฐ ๊ฒฐ์ •
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์„ ๋ฐ”๋กœ ์ƒ๊ฐํ•˜์ง„ ๋ชปํ–ˆ๋‹ค(์‚ฌ์‹ค ์ €๊ฒŒ ๋ญ”์ง€๋„ ๋ชฐ๋ž๋‹ค)


OOM(Out Of Memory)

์•„์›ƒ ์˜ค๋ธŒ ๋ฉ”๋ชจ๋ฆฌ, ๋ง ๊ทธ๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ผ์ •์น˜๋ฅผ ๋„˜์–ด๊ฐ€์„œ out๋˜์—ˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

์šด์˜์ฒด์ œ ์ž์ฒด์—์„œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ, ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒํ•˜๊ฒŒ ๋˜๋Š” ์ผ€์ด์Šค์ด๋‹ค.

ํ•˜์ง€๋งŒ, ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ถ„๋ช… CPU๊ฐ€ ๊ฝ‰ ์ฐจ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ๋„ OOM์Šค์ฝ”์–ด๊ฐ€ ๋†’๋‹ค๋ฉด ์ถฉ๋ถ„ํžˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด์—ˆ๋‹ค.

์ด๋กœ์ธํ•œ ๋ฌธ์ œ๊ฐ€ ๋ญ˜๊นŒ?

์šฐ๋ฆฌ์˜ ๋„์ปค ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ถ„๋ช… CPU๋ฅผ ์ „๋ถ€ ์ฐจ์ง€ํ•˜๊ณ  ์„œ๋ฒ„์ž์ฒด๊ฐ€ ํ„ฐ์งˆ ์œ„ํ—˜์ด ์•„๋‹Œ(์šฐ๋ฆฌ ๊ธฐ์ค€์œผ๋กœ๋Š” CPU๋ฅผ 30ํผ์„ผํŠธ๋„ ๋จน์ง€ ์•Š์•˜์„ ๋•Œ) ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด๋ฅผ ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„๊ฐ€ killํ•ด๋ฒ„๋ฆฌ๋Š”, OOM KILL์ƒํƒœ๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค.

์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋‚˜๋งŒ์˜ ์—ฌ์ •์„ ์ •๋ฆฌํ•ด๋ณด์ž.

1. ์„œ๋ฒ„์—์„œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

docker ps -a๋กœ ์ „์ฒด๋ฅผ ํ™•์ธํ•ด๋ณด์•˜๋‹ค. ํ”„๋กœ์„ธ์Šค์—์„œ OOM kill์„ ํ–ˆ์„ ๋•Œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„์˜ˆ ์‚ฌ๋ผ์ง„ ์ด์ƒํ•œ ํ˜„์ƒ(?)์„ ๋ณด๊ณ , ์ด๊ฒŒ ๋„์ปค์—์„œ ์ข…๋ฃŒ๋œ๊ฒƒ์ด ์•„๋‹๊ฒƒ์ด๋‹ค๋ผ๊ณ  ์ถ”๋ก ํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ๋„์ปค ์ „์ฒด๋ฅผ ๋กœ๊น…ํ•ด๋ณด์•˜์„ ๋•Œ, ๋„์ปค ์ž์ฒด์—์„œ ์ข…๋ฃŒ์‹œํ‚ค์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

**2. OOM์„ ์•Œ๊ณ ๋‚œ ํ›„, OOM ์ ์ˆ˜๋ฅผ ํ™•์ธํ•ด๋ณด์•˜๋‹ค. **

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์˜ต์…˜์„ ๋‘์—ˆ๋‹ค.

ยฉ 2024 Adultlee. All rights reserved.Made with โค by ์ด์„ฑ์ธ