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

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

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

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

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

เบซเบ™เบถเปˆเบ‡เปƒเบ™เบงเบฝเบเบ‡เบฒเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡ Linux เปเบกเปˆเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบซเป‰เบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบญเบปเบฒเบกเบฑเบ™. เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบซเบผเบทเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบˆเบฐเบฎเป‰เบญเบ‡เบ‚เปเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบˆเบฒเบ OS, เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบกเบฑเบ™เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆ. เบ–เป‰เบฒ OS เบ›เปˆเบญเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบซเป‰เบเบฑเบšเบ—เบธเบเบ„เบปเบ™เบ—เบตเปˆเบ‚เปเปเบ•เปˆเบšเปเปˆเบกเบตเปเบœเบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™, เปƒเบ™เป„เบงเป†เบ™เบตเป‰เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบˆเบฐเบซเบกเบปเบ”เป„เบ›เปเบฅเบฐเบฅเบฐเบšเบปเบšเบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบง. เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ™เบตเป‰, OS เบชเบฐเบซเบ‡เบงเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบชเปเบฒเบฅเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เปเบ•เปˆเบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบšเปเปˆเป„เบ”เป‰เบ›เปˆเบญเบเบกเบฑเบ™. เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบกเบทเปˆเบญเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™. เบกเบฑเบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบงเปˆเบฒ OS เบšเปเปˆเบกเบตเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบŸเบฃเบต, เปเบ•เปˆเบกเบฑเบ™เบกเบญเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบซเป‰เบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เปเบฅเบฐเป€เบกเบทเปˆเบญเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™, OS เบˆเบฐเบˆเบฑเบ”เบชเบฑเบ™เบกเบฑเบ™เบ–เป‰เบฒเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰. เบ‚เปเป‰เป€เบชเบเปเบกเปˆเบ™เบงเปˆเบฒเบšเบฒเบ‡เบ„เบฑเป‰เบ‡ OS เบชเบฐเบซเบ‡เบงเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ, เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบšเปเปˆเบกเบตเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบŸเบฃเบต, เปเบฅเบฐเบฅเบฐเบšเบปเบšเบ‚เบฑเบ”เบ‚เป‰เบญเบ‡. OOM เบกเบตเบšเบปเบ”เบšเบฒเบ”เบชเปเบฒเบ„เบฑเบ™เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ™เบตเป‰เปเบฅเบฐเบขเบธเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเปƒเบซเป‰ kernel panicking. เป€เบกเบทเปˆเบญเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ 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 เบชเบฒเบกเบฒเบ”เบชเบฐเบซเบ‡เบงเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบชเปเบฒเบฅเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบซเบผเบฒเบเบเปˆเบงเบฒเบ—เบตเปˆเบกเบตเบขเบนเปˆเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบกเบฑเบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡, เปเบฅเบฐเบžเบถเบ”เบ•เบดเบเปเบฒเบ™เบตเป‰เบ–เบทเบเบ„เบงเบšเบ„เบธเบกเป‚เบ”เบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต Linux kernel. เบ•เบปเบงเปเบ›เปเบกเปˆเบ™เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰ vm.overcommit_memory.

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

0: kernel เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบˆเบฐเบชเบฐเบซเบ‡เบงเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เบซเบผเบทเบšเปเปˆ. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™ 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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™