PostgreSQL์šฉ Linux์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ‚ฌ๋Ÿฌ ์„ค์ •

PostgreSQL์šฉ Linux์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ‚ฌ๋Ÿฌ ์„ค์ •

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() ํŠน์ • ๊ทœ์น™์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  1. ์ปค๋„ ์ž์ฒด์—๋Š” ์ตœ์†Œํ•œ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  4. ์ตœ์†Œํ•œ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์™„๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  5. ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์™„๋ฃŒํ•˜๋ ค๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์™„๋ฃŒ ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๋Š” ๋ณต์žกํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“  ํ™•์ธ์„ ์™„๋ฃŒํ•œ ํ›„ 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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€