Linux์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๊ฐ ์๊ธฐ์น ์๊ฒ ์ข ๋ฃ๋๋ฉด ์์ธ์ ์ฐพ์์ผ ํฉ๋๋ค. ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๊ฐ ์์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๊ทธ์ธ๊ทธ โ ๋ฐฑ์๋ ์๋ฒ์ ๋ฒ๊ทธ๋ก ์ธํ ์คํจ. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋๋ญ ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋จ์ํ ๋์คํฌ ๊ณต๊ฐ์ด๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๋๋ค. ๋์คํฌ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ ํ์ถ๊ตฌ๋ ๋จ ํ๋๋ฟ์ ๋๋ค. ๊ณต๊ฐ์ ํ๋ณดํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค์ ์์ํ๋ ๊ฒ์ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํฌ๋ฌ
์๋ฒ๋ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ Linux๋ ๋ ๊ฐ์ง ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ ์ฒด ์์คํ ์ ์ถฉ๋์ํค๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ชจํ๋ ํ๋ก์ธ์ค(์์ฉ ํ๋ก๊ทธ๋จ)๋ฅผ ์ข ๋ฃํ๋ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๊ณ OS๊ฐ ์ถฉ๋ํ์ง ์๋๋ก ์ ์ฅํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค. ๊ฐ๋จํ ๋งํด์ Out-Of-Memory Killer๋ ์ปค๋์ด ์ถฉ๋ํ์ง ์๋๋ก ์์ฉ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ ํ๋ก์ธ์ค์ ๋๋ค. OS ์คํ์ ์ ์งํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌ์ํฉ๋๋ค. ๋จผ์ OOM์ ์๋ ๋ฐฉ์๊ณผ ์ ์ด ๋ฐฉ๋ฒ์ ๋ ผ์ํ ๋ค์ OOM Killer๊ฐ ์ข ๋ฃํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ด๋ป๊ฒ ๊ฒฐ์ ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Linux์ ์ฃผ์ ์์ ์ค ํ๋๋ ํ๋ก์ธ์ค๊ฐ ์์ฒญํ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ธ์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ OS์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญํ์ง๋ง ์ด๋ฅผ ์์ ํ ์ฌ์ฉํ์ง๋ ์์ต๋๋ค. OS๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญํ์ง๋ง ์ฌ์ฉํ ๊ณํ์ด ์๋ ๋ชจ๋ ์ฌ๋์๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค๋ฉด ๋จธ์ง์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๊ณ ์์คํ ์ด ์คํจํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด OS๋ ํ๋ก์ธ์ค์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฝํ์ง๋ง ์ค์ ๋ก ํด์ ํ์ง๋ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ์ค์ ๋ก ์ฌ์ฉํ ๋๋ง ํ ๋น๋ฉ๋๋ค. OS์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ง๋ง ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ , ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ ๋ OS๋ ๊ฐ๋ฅํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํฉ๋๋ค. ๋จ์ ์ ๋๋๋ก OS๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฝํ์ง๋ง ์ ์ ํ ์์ ์ ์ฌ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ด ์์คํ ์ด ์ถฉ๋ํ๋ค๋ ๊ฒ์ ๋๋ค. OOM์ ์ด ์๋๋ฆฌ์ค์์ ์ค์ํ ์ญํ ์ ํ๋ฉฐ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ์ฌ ์ปค๋์ด ํจ๋์ ๋น ์ง๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. PostgreSQL ํ๋ก์ธ์ค๊ฐ ๊ฐ์ ๋ก ์ข ๋ฃ๋๋ฉด ๋ก๊ทธ์ ๋ค์ ๋ฉ์์ง๊ฐ ๋ํ๋ฉ๋๋ค.
Out of Memory: Killed process 12345 (postgres).
์์คํ
๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๊ณ ํด์ ํ ์ ์๋ ๊ฒฝ์ฐ ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค. out_of_memory
. ์ด ๋จ๊ณ์์ ๊ทธ๋
๊ฐ ํด์ผ ํ ์ผ์ ํ๋ ์ด์, ์ฆ ํ๋ ์ด์์ ํ๋ก์ธ์ค๋ฅผ ์๋ฃํ๋ ๊ฒ๋ฟ์
๋๋ค. OOM-killer๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ฆ์ ์ข
๋ฃํด์ผ ํฉ๋๊น, ์๋๋ฉด ๊ธฐ๋ค๋ฆด ์ ์์ต๋๊น? ๋ถ๋ช
ํ out_of_memory๊ฐ ํธ์ถ๋๋ฉด I/O ์์
์ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ ๋์คํฌ์ ํ์ด์งํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฐ๋ผ์ OOM ํฌ๋ฌ๋ ๋จผ์ ๊ฒ์ฌ๋ฅผ ์ํํ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํด์ผ ํ๋์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ์๋ ํ์ธ ์ฌํญ์ด ๋ชจ๋ ๊ธ์ ์ ์ด๋ฉด OOM์ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํฉ๋๋ค.
ํ๋ก์ธ์ค ์ ํ
๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๋ฉด ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค. out_of_memory()
. ๊ธฐ๋ฅ์ด ์์ด์ select_bad_process()
, ํจ์๋ก๋ถํฐ ํ๊ฐ๋ฅผ ๋ฐ์ต๋๋ค. badness()
. "์ต์
์" ํ๋ก์ธ์ค๊ฐ ๋ชฉํ๊ฐ ๋ฉ๋๋ค. ๊ธฐ๋ฅ badness()
ํน์ ๊ท์น์ ๋ฐ๋ผ ํ๋ก์ธ์ค๋ฅผ ์ ํํฉ๋๋ค.
- ์ปค๋ ์์ฒด์๋ ์ต์ํ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
- ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํด์ผ ํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฑฐ์ ์ฌ์ฉํ์ง ์๋ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ ํ์๊ฐ ์์ต๋๋ค.
- ์ต์ํ์ ํ๋ก์ธ์ค๋ฅผ ์๋ฃํด์ผ ํฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ง์ ์๋ฃํ๋ ค๋ ํ๋ก์ธ์ค์ ์๋ฃ ๊ฐ๋ฅ์ฑ์ ๋์ด๋ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
์ด๋ฌํ ๋ชจ๋ ํ์ธ์ ์๋ฃํ ํ OOM์ ์ ์(oom_score
). OOM ํ ๋น oom_score
๊ฐ ํ๋ก์ธ์ค๋ฅผ ์คํํ ๋ค์ ์ด ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ ๊ณฑํฉ๋๋ค. ๊ฐ์ด ๋ ํฐ ํ๋ก์ธ์ค๋ OOM Killer์ ํฌ์์์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์ต๋๋ค. ๋ฃจํธ ์ฌ์ฉ์์ ์ฐ๊ฒฐ๋ ํ๋ก์ธ์ค๋ ์ ์๊ฐ ๋ฎ๊ณ ๊ฐ์ ๋ก ์ข
๋ฃ๋ ๊ฐ๋ฅ์ฑ์ด ์ ์ต๋๋ค.
postgres=# SELECT pg_backend_pid();
pg_backend_pid
----------------
3813
(1 row)
Postgres ํ๋ก์ธ์ค ID๋ 3813์ด๋ฏ๋ก ๋ค๋ฅธ ์
ธ์์๋ ์ด ์ปค๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๋ฅผ ์ป์ ์ ์์ต๋๋ค. oom_score
:
vagrant@vagrant:~$ sudo cat /proc/3813/oom_score
2
OOM-Killer๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ ํ ์ข
๋ฃํ์ง ์๋๋ก ํ๋ ค๋ฉด ๋ค๋ฅธ ์ปค๋ ์ต์
์ด ์์ต๋๋ค: oom_score_adj
. ์ค์ํ๊ฒ ์๊ฐํ๋ ํ๋ก์ธ์ค๋ฅผ ์๋ฃํ ๊ฐ๋ฅ์ฑ์ ์ค์ด๋ ค๋ฉด ํฐ ์์ ๊ฐ์ ์ถ๊ฐํ์ธ์.
sudo echo -100 > /proc/3813/oom_score_adj
๊ฐ์ ์ค์ ํ๋ ค๋ฉด oom_score_adj
, ์๋น์ค ๋ธ๋ก์์ OOMScoreAdjust๋ฅผ ์ค์ ํฉ๋๋ค.
[Service]
OOMScoreAdjust=-1000
๋๋ ์ฌ์ฉ oomprotect
ํ์์ rcctl
.
rcctl set <i>servicename</i> oomprotect -1000
ํ๋ก์ธ์ค ๊ฐ์ ์ข ๋ฃ
ํ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ ์ด๋ฏธ ์ ํ๋์ด ์์ผ๋ฉด OOM-Killer๋ ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. oom_kill_task()
. ์ด ํจ์๋ ํ๋ก์ธ์ค์ ์ข
๋ฃ ์ ํธ๋ฅผ ๋ณด๋
๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ ๊ฒฝ์ฐ oom_kill()
์ด ํจ์๋ฅผ ํธ์ถํ์ฌ SIGKILL ์ ํธ๋ฅผ ํ๋ก์ธ์ค์ ๋ณด๋
๋๋ค. ์ปค๋ ๋ก๊ทธ์ ๋ฉ์์ง๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค.
Out of Memory: Killed process [pid] [name].
OOM-Killer ์ ์ด ๋ฐฉ๋ฒ
Linux์์๋ OOM-Killer๋ฅผ ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํ ์ ์์ต๋๋ค(ํ์๋ ๊ถ์ฅ๋์ง ์์). ํ์ฑํ ๋๋ ๋นํ์ฑํํ๋ ค๋ฉด ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ญ์์ค. vm.oom-kill
. ๋ฐํ์์ OOM-Killer๋ฅผ ํ์ฑํํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ ์คํํ์ธ์. sysctl
.
sudo -s sysctl -w vm.oom-kill = 1
OOM-Killer๋ฅผ ๋นํ์ฑํํ๋ ค๋ฉด ๋์ผํ ๋ช ๋ น์ ๊ฐ 0์ ์ง์ ํ์ญ์์ค.
sudo -s sysctl -w vm.oom-kill = 0
์ด ๋ช
๋ น์ ๊ฒฐ๊ณผ๋ ์์ํ ์ ์ฅ๋์ง ์๊ณ ์ฒ์ ์ฌ๋ถํ
ํ ๋๊น์ง๋ง ์ ์ฅ๋ฉ๋๋ค. ์ง์์ฑ์ด ๋ ํ์ํ๋ฉด ํ์ผ์ ๋ค์ ์ค์ ์ถ๊ฐํ์ธ์. /etc/sysctl.conf
:
echo vm.oom-kill = 1 >>/etc/sysctl.conf
ํ์ฑํ ๋ฐ ๋นํ์ฑํํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ณ์๋ฅผ ์์ฑํ๋ ๊ฒ์
๋๋ค. panic_on_oom
. ๊ฐ์ ์ธ์ ๋ ์ง ํ์ธํ ์ ์์ต๋๋ค. /proc
.
$ cat /proc/sys/vm/panic_on_oom
0
๊ฐ์ 0์ผ๋ก ์ค์ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด๋ ์ปค๋ ํจ๋์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
$ echo 0 > /proc/sys/vm/panic_on_oom
๊ฐ์ 1๋ก ์ค์ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๋ฉด ์ปค๋ ํจ๋์ด ๋ฐ์ํฉ๋๋ค.
echo 1 > /proc/sys/vm/panic_on_oom
OOM-Killer๋ ์ผ๊ณ ๋ ์๋ง ์๋ ๊ฒ์ด ์๋๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ Linux๊ฐ ์ค์ ๋ก ํ ๋นํ์ง ์๊ณ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒ๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ก์ธ์ค์ ์์ฝํ ์ ์์ผ๋ฉฐ ์ด ๋์์ Linux ์ปค๋ ๋งค๊ฐ๋ณ์์ ์ํด ์ ์ด๋๋ค๊ณ ๋งํ์ต๋๋ค. ๋ณ์๊ฐ ์ด๋ฅผ ๋ด๋นํฉ๋๋ค. vm.overcommit_memory
.
๋ค์ ๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค.
0: ์ปค๋ ์์ฒด์์ ๋๋ฌด ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฝํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ด๋ ๋๋ถ๋ถ์ Linux ๋ฒ์ ์์ ๊ธฐ๋ณธ๊ฐ์
๋๋ค.
1: ์ปค๋์ ํญ์ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฝํฉ๋๋ค. ์ธ์ ๊ฐ๋ ํ๋ก์ธ์ค์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ์ ์์ผ๋ฏ๋ก ์ด๋ ์ํํฉ๋๋ค.
2: ์ปค๋์ ๋งค๊ฐ๋ณ์์ ์ง์ ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฝํ์ง ์์ต๋๋ค. overcommit_ratio
.
์ด ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ณผ ์์ฝ์ด ํ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ๋น์จ์ ์ง์ ํฉ๋๋ค. ๊ณต๊ฐ์ด ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ง ์์ผ๋ฉฐ ์์ฝ์ด ๊ฑฐ๋ถ๋ฉ๋๋ค. ์ด๋ PostgreSQL์ ๊ถ์ฅ๋๋ ๊ฐ์ฅ ์์ ํ ์ต์
์
๋๋ค. OOM-Killer๋ ๋ค๋ฅธ ์์, ์ฆ ๋ณ์์ ์ํด ์ ์ด๋๋ ์ค์ํ ๊ธฐ๋ฅ์ ์ํฅ์ ๋ฐ์ต๋๋ค. cat /proc/sys/vm/swappiness
. ์ด ๊ฐ์ ์ปค๋์ ํ์ด์ง ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์๋ ค์ค๋๋ค. ๊ฐ์ด ๋์์๋ก OOM์ด ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ ๊ฐ๋ฅ์ฑ์ ๋ฎ์์ง์ง๋ง I/O ์์
์ผ๋ก ์ธํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ๊ฐ์ด ๋ฎ์์๋ก OOM-Killer ๊ฐ์
๊ฐ๋ฅ์ฑ์ด ๋์์ง์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ๋ ๋์์ง๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 60์ด์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ง์ ๊ฒฝ์ฐ์๋ 1๋ก ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
๊ฒฐ๊ณผ
OOM-Killer์ "ํฌ๋ฌ"๊ฐ ๋น์ ์ ๋๋ผ๊ฒ ํ์ง ์๋๋ก ํ์ธ์. ์ด ๊ฒฝ์ฐ ์ด์ธ์๋ ์์คํ
์ ๊ตฌ์ธ์ฃผ๊ฐ ๋ ๊ฒ์
๋๋ค. ์ด๋ ์ต์
์ ํ๋ก์ธ์ค๋ฅผ "์ข
๋ฃ"ํ๊ณ ์์คํ
์ถฉ๋์ ๋ฐฉ์งํฉ๋๋ค. PostgreSQL์ ์ข
๋ฃํ๊ธฐ ์ํด OOM-Killer๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ์ญ์์ค. vm.overcommit_memory
๊ฐ 2. ์ด๋ OOM-Killer๊ฐ ๊ฐ์
ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ๋ณด์ฅํ์ง๋ ์์ง๋ง PostgreSQL ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ข
๋ฃํ ๊ฐ๋ฅ์ฑ์ ์ค์ฌ์ค๋๋ค.
์ถ์ฒ : habr.com