๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ์‹œ์Šคํ…œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ๋Œ€์ฒ˜ ๋ฐฉ๋ฒ• ์„ค์ •ํ•˜๊ธฐ Linux PostgreSQL์šฉ

๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ์‹œ์Šคํ…œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ๋Œ€์ฒ˜ ๋ฐฉ๋ฒ• ์„ค์ •ํ•˜๊ธฐ Linux PostgreSQL์šฉ

๋•Œ Linux ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๊ฐ€ ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ์ข…๋ฃŒ๋˜์—ˆ์œผ๋ฉฐ, ๊ทธ ์›์ธ์„ ํŒŒ์•…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์›์ธ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‹œ๊ทธ์„ธ๊ทธ โ€” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์˜ ๋ฒ„๊ทธ๋กœ ์ธํ•œ ์‹คํŒจ. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋“œ๋ญ…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋‹จ์ˆœํžˆ ๋””์Šคํฌ ๊ณต๊ฐ„์ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง‘๋‹ˆ๋‹ค. ๋””์Šคํฌ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ ํƒˆ์ถœ๊ตฌ๋Š” ๋‹จ ํ•˜๋‚˜๋ฟ์ž…๋‹ˆ๋‹ค. ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ‚ฌ๋Ÿฌ

์–ธ์ œ ์„œ๋ฒ„ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง‘๋‹ˆ๋‹ค. Linux ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๊ธฐ(Out-Of-Memory Killer, OOM Killer)๋Š” ๋‘ ๊ฐ€์ง€ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ๋‹ค์šด์‹œํ‚ค๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ์šด์˜์ฒด์ œ ๋‹ค์šด์„ ๋ง‰๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด, OOM Killer๋Š” ์ปค๋„ ๋‹ค์šด์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ข…๋ฃŒํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ์šด์˜์ฒด์ œ๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํฌ์ƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋จผ์ € OOM์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์ œ์–ดํ•˜๋Š”์ง€ ์‚ดํŽด๋ณธ ๋‹ค์Œ, OOM Killer๊ฐ€ ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ข…๋ฃŒํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ์—…๋ฌด ์ค‘ ํ•˜๋‚˜ Linux โ€” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”์ฒญํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์šด์˜์ฒด์ œ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•˜์ง€๋งŒ ์ „๋ถ€ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์šด์˜์ฒด์ œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•˜๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋ฉด ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋ถ€์กฑํ•ด์ ธ ์‹œ์Šคํ…œ์ด ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ์„ธ์Šค์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜ˆ์•ฝํ•ด ๋‘์ง€๋งŒ ์‹ค์ œ๋กœ ํ• ๋‹นํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ์šด์˜์ฒด์ œ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†์„ ๋•Œ ํ”„๋กœ์„ธ์Šค์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜ˆ์•ฝํ•ด ๋‘๊ณ , ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”๋กœ ํ•  ๋•Œ ๊ฐ€๋Šฅํ•˜๋ฉด ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ ์šด์˜์ฒด์ œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜ˆ์•ฝํ•ด ๋‘์—ˆ์ง€๋งŒ ์ •์ž‘ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†์–ด ์‹œ์Šคํ…œ์ด ์ถฉ๋Œํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 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

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster