ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืึทืจื•ื™ืฃ-ืคื•ืŸ-ื–ื™ืงืึธืจืŸ ืงื™ืœืœืขืจ ืื™ืŸ ืœื™ื ื•ืงืก ืคึฟืึทืจ PostgreSQL

ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืึทืจื•ื™ืฃ-ืคื•ืŸ-ื–ื™ืงืึธืจืŸ ืงื™ืœืœืขืจ ืื™ืŸ ืœื™ื ื•ืงืก ืคึฟืึทืจ PostgreSQL

ื•ื•ืขืŸ ืึท ื“ืึทื˜ืึทื‘ื™ื™ืก ืกืขืจื•ื•ืขืจ ืงื•ื•ื™ืฅ ืึทื ื™ืงืกืคึผืขืงื˜ื™ื“ืœื™ ืื™ืŸ ืœื™ื ื•ืงืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ืกื™ื‘ื”. ืขืก ืงืขืŸ ื–ื™ื™ืŸ ืขื˜ืœืขื›ืข ืกื™ื‘ื•ืช. ืœืžืฉืœ, SIGSEGV - ื“ื•ืจื›ืคืึทืœ ืจืขื›ื˜ ืฆื• ืึท ื–ืฉื•ืง ืื™ืŸ ื“ื™ ื‘ืึทืงืขื ื“ ืกืขืจื•ื•ืขืจ. ืื‘ืขืจ ื“ืึธืก ืื™ื– ื–ืขืœื˜ืŸ. ืจื•ื‘ึฟ ืึธืคื˜ ืื™ืจ ื ืึธืจ ืœื•ื™ืคืŸ ืื•ื™ืก ืคื•ืŸ ื“ื™ืกืง ืคึผืœืึทืฅ ืึธื“ืขืจ ื–ื›ึผืจื•ืŸ. ืื•ื™ื‘ ืื™ืจ ืœื•ื™ืคืŸ ืื•ื™ืก ืคื•ืŸ ื“ื™ืกืง ืคึผืœืึทืฅ, ืขืก ืื™ื– ื‘ืœื•ื™ื– ืื™ื™ืŸ ื•ื•ืขื’ ืื•ื™ืก - ืคืจื™ื™ ืคึผืœืึทืฅ ืื•ืŸ ืจื™ืกื˜ืึทืจื˜ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก.

ืื•ื™ืก-ืคื•ืŸ-ื–ื™ืงืึธืจืŸ ืงื™ืœืœืขืจ

ื•ื•ืขืŸ ืึท ืกืขืจื•ื•ืขืจ ืึธื“ืขืจ ืคึผืจืึธืฆืขืก ืœื•ื™ืคื˜ ืื•ื™ืก ืคื•ืŸ ื–ื›ึผืจื•ืŸ, ืœื™ื ื•ืงืก ืึธืคืคืขืจืก 2 ืกืึทืœื•ืฉืึทื ื–: ืงืจืึทืš ื“ื™ ื’ืื ืฆืข ืกื™ืกื˜ืขื ืึธื“ืขืจ ืคืึทืจืขื ื“ื™ืงืŸ ื“ืขื ืคึผืจืึธืฆืขืก (ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ) ื•ื•ืึธืก ืื™ื– ืขืกืŸ ื–ื›ึผืจื•ืŸ. ืขืก ืื™ื– ื‘ืขืกืขืจ, ืคื•ืŸ ืงื•ืจืก, ืฆื• ืคืึทืจืขื ื“ื™ืงืŸ ื“ืขื ืคึผืจืึธืฆืขืก ืื•ืŸ ืจืึทื˜ืขื•ื•ืขืŸ ื“ื™ ืึทืก ืคื•ืŸ ืงืจืึทืฉื™ื ื’. ืื™ืŸ ืึท ื ืึทื˜ืฉืขืœ, Out-Of-Memory Killer ืื™ื– ืึท ืคึผืจืึธืฆืขืก ื•ื•ืึธืก ืงื™ืœื– ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ืจืึทื˜ืขื•ื•ืขืŸ ื“ื™ ืงืขืจืŸ ืคื•ืŸ ืงืจืึทืฉื™ื ื’. ืขืก ืงืจื‘ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ื”ืึทืœื˜ืŸ ื“ื™ ืึทืก ืคืœื™ืกื ื“ื™ืง. ื–ืืœ ืก ืขืจืฉื˜ืขืจ ื“ื™ืกืงื•ื˜ื™ืจืŸ ื•ื•ื™ OOM ืึทืจื‘ืขื˜ ืื•ืŸ ื•ื•ื™ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืขืก, ืื•ืŸ ื“ืขืจื ืึธืš ื–ืขืŸ ื•ื•ื™ OOM Killer ื“ื™ืกื™ื™ื“ื– ื•ื•ืึธืก ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ืคืึทืจืขื ื“ื™ืงืŸ.

ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื”ื•ื™ืคึผื˜ ื˜ืึทืกืงืก ืคื•ืŸ ืœื™ื ื•ืงืก ืื™ื– ืฆื• ืึทืœืึทืงื™ื™ื˜ ื–ื™ืงืึธืจืŸ ืฆื• ืคึผืจืึทืกืขืกืึทื– ื•ื•ืขืŸ ื–ื™ื™ ื‘ืขื˜ืŸ ืขืก. ื˜ื™ืคึผื™ืงืึทืœืœื™, ืึท ืคึผืจืึธืฆืขืก ืึธื“ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืจื™ืงื•ื•ืขืก ื–ื™ืงืึธืจืŸ ืคื•ืŸ ื“ื™ ืึทืก, ืึธื‘ืขืจ ื˜ื•ื˜ ื ื™ืฉื˜ ื’ืึธืจ ื ื•ืฆืŸ ืขืก. ืื•ื™ื‘ ื“ื™ ืึทืก ื’ื™ื˜ ืื•ื™ืก ื–ื™ืงืึธืจืŸ ืฆื• ืึทืœืขืžืขืŸ ื•ื•ืืก ื‘ืขื˜ ืคึฟืึทืจ ืขืก ืึธื‘ืขืจ ื”ืื˜ ืงื™ื™ืŸ ืคึผืœืึทื ื– ืฆื• ื ื•ืฆืŸ ืขืก, ื–ื™ื™ืขืจ ื‘ืึทืœื“ ื“ืขืจ ื–ื›ึผืจื•ืŸ ื•ื•ืขื˜ ืœื•ื™ืคืŸ ืื•ื™ืก ืื•ืŸ ื“ื™ ืกื™ืกื˜ืขื ื•ื•ืขื˜ ืคืึทืจืœืึธื–ืŸ. ืฆื• ื•ื™ืกืžื™ื™ื“ืŸ ื“ืขื, ื“ื™ ืึทืก ืจื™ื–ืขืจื•ื•ื– ื–ื™ืงืึธืจืŸ ืคึฟืึทืจ ื“ืขื ืคึผืจืึธืฆืขืก, ืึธื‘ืขืจ ื˜ื•ื˜ ื ื™ืฉื˜ ืึทืงืฉืœื™ ืžืขืœื“ื•ื ื’ ืขืก. ื–ื™ืงืึธืจืŸ ืื™ื– ืึทืœืึทืงื™ื™ื˜ื™ื“ ื‘ืœื•ื™ื– ื•ื•ืขืŸ ืึท ืคึผืจืึธืฆืขืก ืื™ื– ืคืืงื˜ื™ืฉ ื’ืขื’ืื ื’ืขืŸ ืฆื• ื ื•ืฆืŸ ืขืก. ืขืก ื›ืึทืคึผืึทื ื– ืึทื– ื“ื™ ืึทืก ื˜ื•ื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืคืจื™ื™ ื–ื›ึผืจื•ืŸ, ืึธื‘ืขืจ ืขืก ืึทืกื™ื™ื ื– ื–ื›ึผืจื•ืŸ ืฆื• ืึท ืคึผืจืึธืฆืขืก, ืื•ืŸ ื•ื•ืขืŸ ืึท ืคึผืจืึธืฆืขืก ื“ืึทืจืฃ ืขืก, ื“ื™ ืึทืก ืึทืœืึทืงื™ื™ืฅ ืขืก ืื•ื™ื‘ ืขืก ืงืขื ืขืŸ. ื“ื™ ื“ืึทื•ื ืกื™ื™ื“ ืื™ื– ืึทื– ืžืืœ ื“ื™ ืึทืก ืจื™ื–ืขืจื•ื•ื– ื–ื›ึผืจื•ืŸ, ืึธื‘ืขืจ ืื™ืŸ ื“ื™ ืจืขื›ื˜ ืฆื™ื™ื˜ ืขืก ืื™ื– ืงื™ื™ืŸ ืคืจื™ื™ ื–ื›ึผืจื•ืŸ, ืื•ืŸ ื“ื™ ืกื™ืกื˜ืขื ืงืจืึทืฉื™ื–. OOM ืคื™ืขืกืขืก ืึท ื•ื•ื™ื›ื˜ื™ืง ืจืึธืœืข ืื™ืŸ ื“ืขื ืกืฆืขื ืึทืจ ืื•ืŸ ื˜ืขืจืžืึทื ื™ื™ืฅ ืคึผืจืึทืกืขืกืึทื– ืฆื• ืคืึทืจืžื™ื™ึทื“ืŸ ื“ื™ ืงืขืจืŸ ืคื•ืŸ ืคึผืึทื ื™ืง. ื•ื•ืขืŸ ืึท PostgreSQL ืคึผืจืึธืฆืขืก ืื™ื– ื’ืขืฆื•ื•ื•ื ื’ืขืŸ ืฆื• ืคืึทืจืขื ื“ื™ืงืŸ, ืึท ืึธื ื–ืึธื’ ืื•ื™ืก ืื™ืŸ ื“ื™ ืงืœืึธืฅ:

Out of Memory: Killed process 12345 (postgres).

ืื•ื™ื‘ ื“ื™ ืกื™ืกื˜ืขื ืื™ื– ื ื™ื“ืขืจื™ืง ืื•ื™ืฃ ื–ื›ึผืจื•ืŸ ืื•ืŸ ืขืก ืงืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืŸ ืคืจื™ื™, ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืื™ื– ื’ืขืจื•ืคืŸ out_of_memory. ืื™ืŸ ื“ืขื ื‘ื™ื ืข, ื–ื™ ื”ืื˜ ื‘ืœื•ื™ื– ืื™ื™ืŸ ื–ืึทืš ืฆื• ื˜ืึธืŸ - ืคืึทืจืขื ื“ื™ืงืŸ ืื™ื™ืŸ ืึธื“ืขืจ ืžืขืจ ืคึผืจืึทืกืขืกืึทื–. ื–ืึธืœ OOM-killer ืคืึทืจืขื ื“ื™ืงืŸ ื“ืขื ืคึผืจืึธืฆืขืก ื’ืœื™ื™ืš ืึธื“ืขืจ ืงืขืŸ ืขืก ื•ื•ืึทืจื˜ืŸ? ื“ืึธืš, ื•ื•ืขืŸ ืึธื•ื˜_ืคื•ืŸ_ืžืขืžืึธืจื™ ืื™ื– ื’ืขืจื•ืคืŸ, ื“ืึธืก ืื™ื– ืจืขื›ื˜ ืฆื• ื•ื•ืืจื˜ืŸ ืคึฟืึทืจ ืึทืŸ I/O ืึธืคึผืขืจืึทืฆื™ืข ืึธื“ืขืจ ืคึผื™ื™ื“ื–ืฉื™ื ื’ ืฆื• ื“ื™ืกืง. ื“ืขืจื™ื‘ืขืจ, ื“ืขืจ OOM ืงื™ืœืœืขืจ ืžื•ื–ืŸ ืขืจืฉื˜ืขืจ ื“ื•ืจื›ืคื™ืจืŸ ื˜ืฉืขืงืก ืื•ืŸ, ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื–ื™ื™, ื‘ืึทืฉืœื™ืกืŸ ืึทื– ื“ืขืจ ืคึผืจืึธืฆืขืก ื“ืึทืจืฃ ื–ื™ื™ืŸ ื˜ืขืจืžืึทื ื™ื™ื˜ื™ื“. ืื•ื™ื‘ ืึทืœืข ื“ื™ ื˜ืฉืขืงืก ืื•ื ื˜ืŸ ื–ืขื ืขืŸ positive, 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 ืคึผืจืึธืฆืขืก ืฉื™ื™ึทืŸ ืื™ื– 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

ืื•ื™ืฃ ืœื™ื ื•ืงืก, ืื™ืจ ืงืขื ืขืŸ ื’ืขื‘ืŸ ืึธื“ืขืจ ื“ื™ืกื™ื™ื‘ืึทืœ 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 ืงืขื ืขืŸ ื ื™ื˜ ื‘ืœื•ื™ื– ื–ื™ื™ืŸ ืื•ื™ืกื’ืขื“ืจื™ื™ื˜ ืื•ื™ืฃ ืื•ืŸ ืึทื•ื•ืขืง. ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื’ืขื–ืึธื’ื˜ ืึทื– ืœื™ื ื•ืงืก ืงืขื ืขืŸ ืจืขื–ืขืจื•ื•ื™ืจืŸ ืžืขืจ ื–ื™ืงืึธืจืŸ ืคึฟืึทืจ ืคึผืจืึทืกืขืกืึทื– ื•ื•ื™ ืื™ื– ื‘ื ื™ืžืฆื ืึธืŸ ืึทืงืฉืœื™ ืึทืœืึทืงื™ื™ื˜ื™ื ื’ ืขืก, ืื•ืŸ ื“ืขื ื ืึทื˜ื•ืจ ืื™ื– ืงืึทื ื˜ืจืึธื•ืœื“ ื“ื•ืจืš ืึท ืœื™ื ื•ืงืก ืงืขืจืŸ ืคึผืึทืจืึทืžืขื˜ืขืจ. ื“ืขืจ ื•ื•ืึทืจื™ืึทื ื˜ ืื™ื– ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ื“ืขื vm.overcommit_memory.

ืื™ืจ ืงืขื ืขืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื•ื•ืึทืœื•ืขืก ืคึฟืึทืจ ืขืก:

0: ื“ืขืจ ืงืขืจื ืขืœ ื–ื™ืš ื‘ืืฉืœื™ืกื˜ ืฆื™ ืฆื• ืจืขื–ืขืจื•ื•ื™ืจืŸ ืฆื• ืคื™ืœ ื–ื™ืงืึธืจืŸ. ื“ืึธืก ืื™ื– ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืื™ืŸ ืจื•ื‘ึฟ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ืœื™ื ื•ืงืก.
1: ื“ืขืจ ืงืขืจืŸ ื•ื•ืขื˜ ืฉื˜ืขื ื“ื™ืง ืจืขื–ืขืจื•ื•ื™ืจืŸ ืขืงืกื˜ืจืข ื–ื›ึผืจื•ืŸ. ื“ืึธืก ืื™ื– ืจื™ื–ื™ืงืึทืœื™ืฉ, ื•ื•ื™ื™ึทืœ ื“ืขืจ ื–ื›ึผืจื•ืŸ ืงืขืŸ ืœื•ื™ืคืŸ ืื•ื™ืก, ื•ื•ื™ื™ึทืœ, ืจื•ื‘ึฟ ืžืกืชึผืžื, ืื™ื™ืŸ ื˜ืึธื’ ื“ื™ ืคึผืจืึทืกืขืกืึทื– ื•ื•ืขื˜ ื“ืึทืจืคืŸ ืขืก.
2: ื“ืขืจ ืงืขืจืŸ ื•ื•ืขื˜ ื ื™ืฉื˜ ืจืขื–ืขืจื•ื•ื™ืจืŸ ืžืขืจ ื–ื›ึผืจื•ืŸ ื•ื•ื™ ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ืขื ืคึผืึทืจืึทืžืขื˜ืขืจ overcommit_ratio.

ืžื™ื˜ ื“ืขื ืคึผืึทืจืึทืžืขื˜ืขืจ, ืื™ืจ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืคึผืจืึธืฆืขื ื˜ ืคื•ืŸ ื–ื›ึผืจื•ืŸ ื•ื•ืึธืก ืื™ื– ืขืจืœื•ื™ื‘ื˜ ืฆื• ื–ื™ื™ืŸ ืื™ื‘ืขืจ-ืจืขื–ืขืจื•ื•ื™ืจื˜. ืื•ื™ื‘ ืขืก ืื™ื– ืงื™ื™ืŸ ืคึผืœืึทืฅ ืคึฟืึทืจ ืื™ื, ืงื™ื™ืŸ ื–ื›ึผืจื•ืŸ ืื™ื– ืึทืœืึทืงื™ื™ื˜ื™ื“, ืื•ืŸ ื“ื™ ืจืขื–ืขืจื•ื•ืึทืฆื™ืข ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืœื™ื™ืงื ื˜. ื“ืึธืก ืื™ื– ื“ื™ ืกื™ื™ืคืึทืกื˜ ืึธืคึผืฆื™ืข ืจืขืงืึทืžืขื ื“ื™ื“ ืคึฟืึทืจ PostgreSQL. OOM-Killer ืื™ื– ืึทืคืขืงื˜ืึทื“ ื“ื•ืจืš ืืŸ ืื ื“ืขืจ ืขืœืขืžืขื ื˜ - ื“ื™ ืกื•ื•ืึทืคึผื™ื ื’ ืคื™ื™ื™ืงื™ื™ื˜, ื•ื•ืึธืก ืื™ื– ืงืึทื ื˜ืจืึธื•ืœื“ ื“ื•ืจืš ื“ื™ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง cat /proc/sys/vm/swappiness. ื“ื™ ื•ื•ืึทืœื•ืขืก ื–ืึธื’ืŸ ื“ื™ ืงืขืจืŸ ื•ื•ื™ ืฆื• ืฉืขืคึผืŸ ืคึผื™ื™ื“ื–ืฉื™ื ื’. ื“ื™ ื”ืขื›ืขืจ ื“ื™ ื•ื•ืขืจื˜, ื“ื™ ื•ื•ื™ื™ื ื™ืงืขืจ ืžืกืชึผืžื ืขืก ืื™ื– ืึทื– OOM ื•ื•ืขื˜ ืคืึทืจืขื ื“ื™ืงืŸ ื“ืขื ืคึผืจืึธืฆืขืก, ืึธื‘ืขืจ ืจืขื›ื˜ ืฆื• I / O ืึทืคึผืขืจื™ื™ืฉืึทื ื–, ืขืก ื”ืื˜ ืึท ื ืขื’ืึทื˜ื™ื•ื• ืคึผืจืึทืœ ืื•ื™ืฃ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก. ืื•ืŸ ื•ื•ื™ืฆืข ื•ื•ืขืจืกืึท - ื“ื™ ื ื™ื“ืขืจื™ืงืขืจ ื“ื™ ื•ื•ืขืจื˜, ื“ื™ ื”ืขื›ืขืจ ื“ื™ ืœื™ืงืขืœื™ื”ืึธืึธื“ ืคื•ืŸ OOM-Killer ื™ื ื˜ืขืจื•ื•ืขื ื˜ื™ืึธืŸ, ืึธื‘ืขืจ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืคืึธืจืฉื˜ืขืœื•ื ื’ ืื™ื– ืื•ื™ืš ื”ืขื›ืขืจ. ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ื•ื•ืขืจื˜ ืื™ื– 60, ืึธื‘ืขืจ ืื•ื™ื‘ ื“ื™ ื’ืื ืฆืข ื“ืึทื˜ืึทื‘ื™ื™ืก ืคื™ืฅ ืื™ืŸ ื–ื›ึผืจื•ืŸ, ืขืก ืื™ื– ื‘ืขืกืขืจ ืฆื• ืฉื˜ืขืœืŸ ื“ื™ ื•ื•ืขืจื˜ ืฆื• 1.

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ

ื“ื• ื–ืืœืกื˜ ื ื™ืฉื˜ ืœืึธื–ืŸ ื“ื™ "ืงื™ืœืขืจ" ืื™ืŸ OOM-Killer ื™ื‘ืขืจืฉืจืขืงืŸ ืื™ืจ. ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ืขืจ ืจืขืฆื™ื™ืขืš ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ืขืจ ื’ื•ืืœ ืคื•ืŸ ื“ื™ื™ืŸ ืกื™ืกื˜ืขื. ืขืก "ืงื™ืœื–" ื“ื™ ืขืจื’ืกื˜ ืคึผืจืึทืกืขืกืึทื– ืื•ืŸ ืกืึทื•ื•ืขืก ื“ื™ ืกื™ืกื˜ืขื ืคื•ืŸ ืงืจืึทืฉื™ื ื’. ืฆื• ื•ื™ืกืžื™ื™ื“ืŸ ืฆื• ื ื•ืฆืŸ OOM-Killer ืฆื• ืคืึทืจืขื ื“ื™ืงืŸ PostgreSQL, ืฉื˜ืขืœืŸ ืฆื• vm.overcommit_memory ื•ื•ืขืจื˜ 2. ื“ืึธืก ืงืขืŸ ื ื™ืฉื˜ ื’ืึทืจืึทื ื˜ื™ืจืŸ ืึทื– OOM-Killer ื•ื•ืขื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืฆื• ื™ื ืขืจื•ื•ื™ืŸ, ืึธื‘ืขืจ ืขืก ื•ื•ืขื˜ ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ืœื™ืงืขืœื™ื”ืึธืึธื“ ืคื•ืŸ ืคืึธืจืกื™ื ื’ ื“ื™ PostgreSQL ืคึผืจืึธืฆืขืก ืฆื• ืคืึทืจืขื ื“ื™ืงืŸ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’