เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Out-Of-Memory Killer เปƒเบ™ Linux เบชเบณเบฅเบฑเบš PostgreSQL

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Out-Of-Memory Killer เปƒเบ™ Linux เบชเบณเบฅเบฑเบš PostgreSQL

เป€เบกเบทเปˆเบญเบขเบนเปˆเปƒเบ™ Linux เป€เบŠเบตเบšเป€เบงเบตเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบขเบธเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”, เปเบฅเบฐ เบ•เป‰เบญเบ‡เป„เบ”เป‰เบเบณเบ™เบปเบ”เบชเบฒเป€เบซเบ”. เบญเบฒเบ”เบกเบตเบซเบผเบฒเบเบชเบฒเป€เบซเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡, SIGSEGV โ€” เบ„เบงเบฒเบกโ€‹เบฅเบปเป‰เบกโ€‹เป€เบซเบผเบงโ€‹เป€เบ™เบทเปˆเบญเบ‡โ€‹เบˆเบฒเบ bug เปƒเบ™โ€‹เป€เบŠเบตเบšโ€‹เป€เบงเบต backend. เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบซเบฒเบเบฒเบ. เบชเปˆเบงเบ™เบซเบผเบฒเบเบกเบฑเบ, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบซเบกเบปเบ”เบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบซเบผเบทเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเปเบปเบ”เบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบชเบเปŒ, เบกเบตเบ—เบฒเบ‡เบ”เบฝเบงเบญเบญเบ - free up space and restart the database .

เบ™เบฑเบเบ‚เป‰เบฒเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเบณเบ™เบญเบ

เป€เบกเบทเปˆเบญเป€เบˆเบปเป‰เบฒ เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ เบซเบผเบท เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบปเบ”เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณ, Linux Out-Of-Memory Killer เบกเบตเบชเบญเบ‡เบงเบดเบ—เบตเปเบเป‰เป„เบ‚เบ„เบท: เป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฐเบšเบปเบšเบ—เบฑเบ‡เปเบปเบ”เบ‚เบฑเบ”เบ‚เป‰เบญเบ‡ เบซเบผเบท เบขเบธเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ (เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™) เบ—เบตเปˆเบเบดเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณ. เปเบ™เปˆเบ™เบญเบ™, เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบขเบธเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ เปเบฅเบฐ เบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ”เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบˆเบฒเบเบเบฒเบ™เบ‚เบฑเบ”เบ‚เป‰เบญเบ‡. เบชเบฐเบซเบผเบธเบšเปเบฅเป‰เบง, Out-Of-Memory Killer เปเบกเปˆเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบขเบธเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ” kernel เบˆเบฒเบเบเบฒเบ™เบ‚เบฑเบ”เบ‚เป‰เบญเบ‡. เบกเบฑเบ™เป€เบชเบเบชเบฐเบฅเบฐเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปƒเบซเป‰เป€เบฎเบฑเบ”เบงเบฝเบ. เบเปˆเบญเบ™เบญเบทเปˆเบ™เปเบปเบ”, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ OOM เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบกเบฑเบ™, เปเบฅเบฐเบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบšเบดเปˆเบ‡เบงเปˆเบฒ OOM Killer เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบ”เบ—เบตเปˆเบˆเบฐเบขเบธเบ”.

เปœเบถเปˆเบ‡เปƒเบ™เบงเบฝเบเบ‡เบฒเบ™เบซเบผเบฑเบ Linux โ€” เบˆเบฑเบ”เบชเบฑเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเปƒเบซเป‰เบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบกเบทเปˆเบญเบžเบงเบเป€เบ‚เบปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบกเบฑเบ™. เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบง, เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ เบซเบผเบท เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบฎเป‰เบญเบ‡เบ‚เปเปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบˆเบฒเบเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบกเบฑเบ™เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™. เบ–เป‰เบฒเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเปƒเบซเป‰เบเบฑเบšเบ—เบธเบเบ„เบปเบ™เบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เปเบกเบฑเบ™ เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™, เบฅเบฐเบšเบปเบšเบˆเบฐเปเบปเบ”เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบขเปˆเบฒเบ‡เป„เบงเบงเบฒ, เปเบฅเบฐ เบฅเบฐเบšเบปเบšเบˆเบฐเบ‚เบฑเบ”เบ‚เป‰เบญเบ‡. เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบชเบดเปˆเบ‡เบ™เบตเป‰, เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฐเบซเบ‡เบงเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบชเบณเบฅเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เบˆเบฑเบ”เบชเบฑเบ™เบกเบฑเบ™เปเบ—เป‰เป†. เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบกเบทเปˆเบญเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบ•เบฑเป‰เบ‡เปƒเบˆเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™เปเบ—เป‰เป†. เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบšเปเปˆเบกเบตเปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบซเบงเปˆเบฒเบ‡, เปเบ•เปˆเบกเบฑเบ™เบˆเบฑเบ”เบชเบฑเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเปƒเบซเป‰เบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เปเบฅเบฐ เป€เบกเบทเปˆเบญเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™, เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบˆเบฐเบˆเบฑเบ”เบชเบฑเบ™เบกเบฑเบ™เบ–เป‰เบฒเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰. เบ‚เปเป‰เป€เบชเบเปเบกเปˆเบ™เบงเปˆเบฒเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฐเบซเบ‡เบงเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณ, เปเบ•เปˆเป€เบกเบทเปˆเบญเบ•เป‰เบญเบ‡เบเบฒเบ™, เบšเปเปˆเบกเบตเปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบซเบงเปˆเบฒเบ‡, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฐเบšเบปเบšเบ‚เบฑเบ”เบ‚เป‰เบญเบ‡. OOM เบกเบตเบšเบปเบ”เบšเบฒเบ”เบชเบณเบ„เบฑเบ™เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ™เบตเป‰, เบขเบธเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเปƒเบซเป‰ kernel เบ•เบปเบเปƒเบˆ. เป€เบกเบทเปˆเบญเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ PostgreSQL เบ–เบทเบเบขเบธเบ”เป‚เบ”เบเบšเบฑเบ‡เบ„เบฑเบš, เบ‚เปเป‰เบ„เบงเบฒเบกเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบ—เบถเบ:

Out of Memory: Killed process 12345 (postgres).

เบ–เป‰เบฒเบฅเบฐเบšเบปเบšเบกเบตเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ•เปˆเปเบฒเปเบฅเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เบปเบ”เบ›เปˆเบญเบเป„เบ”เป‰, เบŸเบฑเบ‡เบŠเบฑเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒ out_of_memory. เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰, เบ™เบฒเบ‡เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบชเบดเปˆเบ‡เบ”เบฝเบงเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ” - เบชเปเบฒเป€เบฅเบฑเบ”เบซเบ™เบถเปˆเบ‡เบซเบผเบทเบซเบผเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™. OOM-killer เบ„เบงเบ™เบขเบธเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบฑเบ™เบ—เบตเบซเบผเบทเบชเบฒเบกเบฒเบ”เบฅเปเบ–เป‰เบฒเป„เบ”เป‰เบšเป? เปเบ™เปˆเบ™เบญเบ™, เป€เบกเบทเปˆเบญ out_of_memory เบ–เบทเบเป€เบญเบตเป‰เบ™, เบกเบฑเบ™เปเบกเปˆเบ™เป€เบ™เบทเปˆเบญเบ‡เบกเบฒเบˆเบฒเบเบเบฒเบ™เบฅเปเบ–เป‰เบฒเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ I/O เบซเบผเบท paging เบเบฑเบšเปเบœเปˆเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบœเบนเป‰เบ‚เป‰เบฒ OOM เบ—เปเบฒเบญเบดเบ”เบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปเบฅเบฐ, เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบžเบงเบเบกเบฑเบ™, เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบขเบธเบ”เป€เบŠเบปเบฒ. เบ–เป‰เบฒเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบšเบงเบ, OOM เบˆเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™.

เบเบฒเบ™เบ„เบฑเบ”เป€เบฅเบทเบญเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™

เป€เบกเบทเปˆเบญเปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเปเบปเบ”, เบŸเบฑเบ‡เบŠเบฑเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™ out_of_memory(). เบกเบฑเบ™เบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆ select_bad_process(), เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เบˆเบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆ badness(). เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ "เบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”" เบˆเบฐเบ–เบทเบเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ. เบŸเบฑเบ‡เบŠเบฑเบ™ badness() เป€เบฅเบทเบญเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™.

  1. kernel เบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบฑเป‰เบ™เบ•เปˆเปเบฒเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡.
  2. เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบฒเบ.
  3. เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบขเบธเบ”เป€เบŠเบปเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเปƒเบŠเป‰เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบžเบฝเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ.
  4. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบฑเป‰เบ™เบ•เปˆเปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”.
  5. เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ—เบตเปˆเบŠเบฑเบšเบŠเป‰เบญเบ™เบ—เบตเปˆเป€เบžเบตเปˆเบกเป‚เบญเบเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เป€เบญเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”.

เบซเบผเบฑเบ‡เบˆเบฒเบเบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, OOM เบเบงเบ”เป€เบšเบดเปˆเบ‡เบ„เบฐเปเบ™เบ™ (oom_score). OOM เปเบ•เปˆเบ‡เบ•เบฑเป‰เบ‡ oom_score เปเบ•เปˆเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เบนเบ™เบ„เปˆเบฒเบ™เบตเป‰เบ”เป‰เบงเบเบˆเปเบฒเบ™เบงเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบกเบตเบ„เปˆเบฒเปƒเบซเบเปˆเบเบงเปˆเบฒเบกเบตเปเบ™เบงเป‚เบ™เป‰เบกเบ—เบตเปˆเบˆเบฐเบ•เบปเบเป€เบ›เบฑเบ™เป€เบซเบเบทเปˆเบญเบ‚เบญเบ‡ OOM Killer. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบฎเบฒเบเบกเบตเบ„เบฐเปเบ™เบ™เบ•เปˆเปเบฒเปเบฅเบฐเบซเบ™เป‰เบญเบเบ—เบตเปˆเบˆเบฐเบ–เบทเบเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบขเบธเบ”เป€เบŠเบปเบฒ.

postgres=# SELECT pg_backend_pid();
pg_backend_pid 
----------------
    3813
(1 row)

ID เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Postgres เปเบกเปˆเบ™ 3813, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™เปเบเบฐเบญเบทเปˆเบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบฐเปเบ™เบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ kernel เบ™เบตเป‰. 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 เป„เบ›เบซเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เบ‚เปเป‰เบ„เบงเบฒเบกเบ–เบทเบเบ‚เบฝเบ™เปƒเบชเปˆเบšเบฑเบ™เบ—เบถเบ kernel.

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

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เบˆเบฐเบšเปเปˆเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เบ•เบฐเบซเบผเบญเบ”เป„เบ›, เปเบ•เปˆเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบปเบ™เบเปˆเบงเบฒ reboot เบ—เปเบฒเบญเบดเบ”. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบ„เบปเบ‡เบ—เบปเบ™เบซเบผเบฒเบ, เป€เบžเบตเปˆเบกเป€เบชเบฑเป‰เบ™เบ™เบตเป‰เปƒเบชเปˆเป„เบŸเบฅเปŒ /etc/sysctl.conf:

echo vm.oom-kill = 1 >>/etc/sysctl.conf

เบญเบตเบเบงเบดเบ—เบตเบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เปƒเบŠเป‰เปเบฅเบฐเบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™เปเบกเปˆเบ™เบเบฒเบ™เบ‚เบฝเบ™เบ•เบปเบงเปเบ› panic_on_oom. เบกเบนเบ™เบ„เปˆเบฒเบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเป„เบ”เป‰เบ•เบฐเบซเบผเบญเบ”เป€เบงเบฅเบฒ /proc.

$ cat /proc/sys/vm/panic_on_oom
0

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ›เบฑเบ™ 0, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบกเบปเบ”, เบˆเบฐเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเปเบ›เบเปƒเบˆ kernel.

$ echo 0 > /proc/sys/vm/panic_on_oom

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ›เบฑเบ™ 1, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบกเบปเบ”, kernel panic เบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™.

echo 1 > /proc/sys/vm/panic_on_oom

OOM-Killer เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ” เปเบฅเบฐ เบ›เบดเบ”เป„เบ”เป‰, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบง. Linux เบญเบฒเบ”เบˆเบฐเบชเบฐเบซเบ‡เบงเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบซเบผเบฒเบเบเบงเปˆเบฒเบชเบณเบฅเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆ, เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เบˆเบฑเบ”เบชเบฑเบ™เบกเบฑเบ™เปเบ—เป‰เป†, เปเบฅเบฐเบžเบถเบ”เบ•เบดเบเบณเบ™เบตเป‰เบ–เบทเบเบ„เบงเบšเบ„เบธเบกเป‚เบ”เบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต kernel Linuxเบ•เบปเบงเปเบ›เบกเบตเบ„เบงเบฒเบกเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบ•เปเปˆเบชเบดเปˆเบ‡เบ™เบตเป‰. vm.overcommit_memory.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™:

0: เป€เบ„เบตเป€เบ™เบฅเป€เบญเบ‡เบˆเบฐเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบˆเบฐเบชเบฐเบซเบ‡เบงเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เบซเบผเบทเบšเปเปˆ. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เป€เบงเบตเบŠเบฑเปˆเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆ. Linux.
1: kernel เบˆเบฐเบชเบฐเบซเบ‡เบงเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบžเบดเป€เบชเบ”เบชเบฐเป€เบซเบกเบต. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบชเปˆเบฝเบ‡, เป€เบžเบฒเบฐเบงเปˆเบฒเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบญเบฒเบ”เบˆเบฐเบซเบกเบปเบ”เป„เบ›, เป€เบžเบฒเบฐเบงเปˆเบฒ, เบชเปˆเบงเบ™เบซเบผเบฒเบเบญเบฒเบ”เบˆเบฐ, เบกเบทเป‰เบซเบ™เบถเปˆเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™.
2: kernel เบˆเบฐเบšเปเปˆเบชเบฐเบซเบ‡เบงเบ™เบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบฒเบเบเปˆเบงเบฒเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต overcommit_ratio.

เบ”เป‰เบงเบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบฅเบฐเบšเบธเป€เบ›เบตเป€เบŠเบฑเบ™เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบ–เบทเบเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบˆเบญเบ‡เป€เบเบตเบ™. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบซเป‰เบญเบ‡เบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™, เบšเปเปˆเบกเบตเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เปเบฅเบฐเบเบฒเบ™เบˆเบญเบ‡เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเป€เบชเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบ›เบญเบ”เป„เบžเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบš PostgreSQL. OOM-Killer เป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบเบฐเบ—เบปเบšเบˆเบฒเบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบญเบทเปˆเบ™ - เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ„เบงเบšเบ„เบธเบกเป‚เบ”เบเบ•เบปเบงเปเบ› cat /proc/sys/vm/swappiness. เบ„เปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเบญเบ kernel เบงเบดเบ—เบตเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบซเบ™เป‰เบฒเป€เบงเบฑเบš. เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบนเบ‡เบ‚เบถเป‰เบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบซเบ™เป‰เบญเบเบ—เบตเปˆ OOM เบˆเบฐเบขเบธเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เปเบ•เปˆเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ I/O เบกเบฑเบ™เบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ—เบฒเบ‡เบฅเบปเบšเบ•เปเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เปเบฅเบฐเปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™ - เบกเบนเบ™เบ„เปˆเบฒเบ•เปˆเปเบฒ, เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เปเบŠเบเปเบŠเบ‡ OOM-Killer เบชเบนเบ‡เบ‚เบถเป‰เบ™, เปเบ•เปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบเบฑเบ‡เบชเบนเบ‡เบเบงเปˆเบฒ. เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™ 60, เปเบ•เปˆเบ–เป‰เบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบกเบฒเบฐเบเบฑเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเป€เบ›เบฑเบ™ 1.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เบขเปˆเบฒเบ›เปˆเบญเบเปƒเบซเป‰ "เบ™เบฑเบเบ‚เป‰เบฒ" เปƒเบ™ OOM-Killer เบขเป‰เบฒเบ™เป€เบˆเบปเป‰เบฒ. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, killer เบˆเบฐเป€เบ›เบฑเบ™เบœเบนเป‰เบŠเปˆเบญเบเปƒเบซเป‰เบฅเบญเบ”เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบกเบฑเบ™ "เบ‚เป‰เบฒ" เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”เปเบฅเบฐเบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ”เบฅเบฐเบšเบปเบšเบˆเบฒเบเบเบฒเบ™เบ‚เบฑเบ”เบ‚เป‰เบญเบ‡. เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เปƒเบŠเป‰ OOM-Killer เป€เบžเบทเปˆเบญเบขเบธเบ” PostgreSQL, เบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™ vm.overcommit_memory เบกเบนเบ™เบ„เปˆเบฒ 2. เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒ OOM-Killer เบˆเบฐเบšเปเปˆเบกเบตเบเบฒเบ™เปเบŠเบเปเบŠเบ‡, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ PostgreSQL เบขเบธเบ”เป€เบŠเบปเบฒ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster