PostgreSQL เชฎเชพเชŸเซ‡ Linux เชฎเชพเช‚ เช†เช‰เชŸ-เช“เชซ-เชฎเซ‡เชฎเชฐเซ€ เช•เชฟเชฒเชฐ เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

PostgreSQL เชฎเชพเชŸเซ‡ Linux เชฎเชพเช‚ เช†เช‰เชŸ-เช“เชซ-เชฎเซ‡เชฎเชฐเซ€ เช•เชฟเชฒเชฐ เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชœเซเชฏเชพเชฐเซ‡ Linux เชฎเชพเช‚ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฐเซเชตเชฐ เช…เชฃเชงเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช›เซ‹เชกเซ€ เชฆเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซเช‚ เช•เชพเชฐเชฃ เชถเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชคเซ‡เชจเชพ เช…เชจเซ‡เช• เช•เชพเชฐเชฃเซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เชฆเชพเช–เซเชฒเชพ เชคเชฐเซ€เช•เซ‡, SIGSEGV โ€” เชฌเซ‡เช•เชเชจเซเชก เชธเชฐเซเชตเชฐเชฎเชพเช‚ เชญเซ‚เชฒเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เชจเชฟเชทเซเชซเชณเชคเชพ. เชชเชฐเช‚เชคเซ เช† เชฆเซเชฐเซเชฒเชญ เช›เซ‡. เชฎเซ‹เชŸเซ‡ เชญเชพเช—เซ‡, เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช–เชพเชฒเซ€ เชกเชฟเชธเซเช• เชœเช—เซเชฏเชพ เช…เชฅเชตเชพ เชฎเซ‡เชฎเชฐเซ€ เชธเชฎเชพเชชเซเชค เชฅเชˆ เชœเชพเชฏ เช›เซ‡. เชœเซ‹ เชคเชฎเชพเชฐเซ€ เชกเชฟเชธเซเช• เชธเซเชชเซ‡เชธ เชธเชฎเชพเชชเซเชค เชฅเชˆ เชœเชพเชฏ, เชคเซ‹ เชเช• เชœ เชฐเชธเซเชคเซ‹ เช›เซ‡ - เชœเช—เซเชฏเชพ เช–เชพเชฒเซ€ เช•เชฐเซ‹ เช…เชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‹.

เช†เช‰เชŸ-เช“เชซ-เชฎเซ‡เชฎเชฐเซ€ เช•เชฟเชฒเชฐ

เชœเซเชฏเชพเชฐเซ‡ เชธเชฐเซเชตเชฐ เช…เชฅเชตเชพ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ€ เชฎเซ‡เชฎเชฐเซ€ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ Linux 2 เช‰เช•เซ‡เชฒเซ‹ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡: เชธเชฎเช—เซเชฐ เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เช•เซเชฐเซ‡เชถ เช•เชฐเซ‹ เช…เชฅเชตเชพ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ (เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ) เช•เซ‡ เชœเซ‡ เชฎเซ‡เชฎเชฐเซ€เชจเซ‡ เช–เชพเชˆ เชฐเชนเซ€ เช›เซ‡ เชคเซ‡เชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเซ‹. เช…เชฒเชฌเชคเซเชค, เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเชตเซ€ เช…เชจเซ‡ OS เชจเซ‡ เช•เซเชฐเซ‡เชถ เชฅเชตเชพเชฅเซ€ เชฌเชšเชพเชตเชตเชพ เชคเซ‡ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡. เชŸเซ‚เช‚เช•เชฎเชพเช‚, เช†เช‰เชŸ-เช“เชซ-เชฎเซ‡เชฎเชฐเซ€ เช•เชฟเชฒเชฐ เช เชเชตเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช›เซ‡ เชœเซ‡ เช•เชฐเซเชจเชฒเชจเซ‡ เช•เซเชฐเซ‡เชถ เชฅเชตเชพเชฅเซ€ เชฌเชšเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชฎเชพเชฐเซ€ เชจเชพเช–เซ‡ เช›เซ‡. เชคเซ‡ OS เชจเซ‡ เชšเชพเชฒเซ เชฐเชพเช–เชตเชพ เชฎเชพเชŸเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชฌเชฒเชฟเชฆเชพเชจ เช†เชชเซ‡ เช›เซ‡. เชšเชพเชฒเซ‹ เชชเชนเซ‡เชฒเชพ เชšเชฐเซเชšเชพ เช•เชฐเซ€เช เช•เซ‡ OOM เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเซเช‚, เช…เชจเซ‡ เชชเช›เซ€ เชœเซเช“ เช•เซ‡ OOM เช•เชฟเชฒเชฐ เช•เชˆ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเชตเซ€ เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡.

Linux เชจเชพ เชฎเซเช–เซเชฏ เช•เชพเชฐเซเชฏเซ‹เชฎเชพเช‚เชจเซเช‚ เชเช• เช เช›เซ‡ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡เช“ เชคเซ‡เชจเซ‡ เชชเซ‚เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ เชฎเซ‡เชฎเชฐเซ€ เชซเชพเชณเชตเชตเชพเชจเซเช‚ เช›เซ‡. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช…เชฅเชตเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ OS เชฅเซ€ เชฎเซ‡เชฎเชฐเซ€เชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซ‹ เชธเช‚เชชเซ‚เชฐเซเชฃ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชจเชฅเซ€. เชœเซ‹ OS เชคเซ‡ เชฆเชฐเซ‡เช•เชจเซ‡ เชฎเซ‡เชฎเชฐเซ€ เช†เชชเซ‡ เช›เซ‡ เชœเซ‡ เชคเซ‡เชจเซ€ เชฎเชพเช‚เช—เชฃเซ€ เช•เชฐเซ‡ เช›เซ‡ เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เช•เซ‹เชˆ เชฏเซ‹เชœเชจเชพ เชจเชฅเซ€, เชคเซ‹ เช–เซ‚เชฌ เชœ เชŸเซ‚เช‚เช• เชธเชฎเชฏเชฎเชพเช‚ เชฎเซ‡เชฎเชฐเซ€ เชธเชฎเชพเชชเซเชค เชฅเชˆ เชœเชถเซ‡ เช…เชจเซ‡ เชธเชฟเชธเซเชŸเชฎ เชจเชฟเชทเซเชซเชณ เชœเชถเซ‡. เช†เชจเซ‡ เช…เชตเช—เชฃเชตเชพ เชฎเชพเชŸเซ‡, OS เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เชฎเซ‡เชฎเชฐเซ€ เช…เชจเชพเชฎเชค เชฐเชพเช–เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชตเชพเชธเซเชคเชตเชฎเชพเช‚ เชคเซ‡เชจเซ‡ เชฐเชฟเชฒเซ€เช เช•เชฐเชคเซเช‚ เชจเชฅเซ€. เชฎเซ‡เชฎเชฐเซ€ เชคเซเชฏเชพเชฐเซ‡ เชœ เชซเชพเชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เช•เซ‹เชˆ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช–เชฐเซ‡เช–เชฐ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชœเชˆ เชฐเชนเซ€ เชนเซ‹เชฏ. เชเชตเซเช‚ เชฌเชจเซ‡ เช›เซ‡ เช•เซ‡ OS เชชเชพเชธเซ‡ เชฎเชซเชค เชฎเซ‡เชฎเชฐเซ€ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชฎเซ‡เชฎเชฐเซ€ เชธเซ‹เช‚เชชเซ‡ เช›เซ‡, เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชคเซ‡เชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เชคเซ‹ OS เชคเซ‡เชจเซ‡ เชซเชพเชณเชตเซ‡ เช›เซ‡ เชœเซ‹ เชคเซ‡ เช•เชฐเซ€ เชถเช•เซ‡. เชจเซเช•เชธเชพเชจ เช เช›เซ‡ เช•เซ‡ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ OS เชฎเซ‡เชฎเชฐเซ€เชจเซ‡ เช…เชจเชพเชฎเชค เชฐเชพเช–เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฏเซ‹เช—เซเชฏ เชธเชฎเชฏเซ‡ เช•เซ‹เชˆ เชฎเชซเชค เชฎเซ‡เชฎเชฐเซ€ เชนเซ‹เชคเซ€ เชจเชฅเซ€, เช…เชจเซ‡ เชธเชฟเชธเซเชŸเชฎ เช•เซเชฐเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. OOM เช† เชฆเซƒเชถเซเชฏเชฎเชพเช‚ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชญเซ‚เชฎเชฟเช•เชพ เชญเชœเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เชฐเซเชจเชฒเชจเซ‡ เช—เชญเชฐเชพเชŸเชฅเซ€ เช…เชŸเช•เชพเชตเชตเชพ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเซ‡ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ PostgreSQL เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเชตเชพเชจเซ€ เชซเชฐเชœ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชฒเซ‹เช—เชฎเชพเช‚ เชเช• เชธเช‚เชฆเซ‡เชถ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

Out of Memory: Killed process 12345 (postgres).

เชœเซ‹ เชธเชฟเชธเซเชŸเชฎเชจเซ€ เชฎเซ‡เชฎเชฐเซ€ เช“เช›เซ€ เชนเซ‹เชฏ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฎเซเช•เซเชค เช•เชฐเซ€ เชถเช•เชพเชคเซ€ เชจเชฅเซ€, เชคเซ‹ เชซเช‚เช•เซเชถเชจ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ out_of_memory. เช† เชคเชฌเช•เซเช•เซ‡, เชคเซ‡เชฃเซ€ เชชเชพเชธเซ‡ เชฎเชพเชคเซเชฐ เชเช• เชœ เชตเชธเซเชคเซ เชฌเชพเช•เซ€ เช›เซ‡ - เชเช• เช…เชฅเชตเชพ เชตเชงเซ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ‹. เชถเซเช‚ OOM-เช•เชฟเชฒเชฐ เชคเชฐเชค เชœ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเซ‡ เช…เชฅเชตเชพ เชคเซ‡ เชฐเชพเชน เชœเซ‹เชˆ เชถเช•เซ‡? เชฆเซ‡เช–เซ€เชคเซ€ เชฐเซ€เชคเซ‡, เชœเซเชฏเชพเชฐเซ‡ 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 เช•เชฟเชฒเชฐเชจเซ‹ เชญเซ‹เช— เชฌเชจเชตเชพเชจเซ€ เชถเช•เซเชฏเชคเชพ เชตเชงเชพเชฐเซ‡ เช›เซ‡. เชฐเซ‚เชŸ เชฏเซเชเชฐ เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‹ เชธเซเช•เซ‹เชฐ เช“เช›เซ‹ เชนเซ‹เชฏ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเชตเชพเชจเซ€ เชซเชฐเชœ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซ‡เชตเซ€ เชถเช•เซเชฏเชคเชพ เช“เช›เซ€ เชนเซ‹เชฏ เช›เซ‡.

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-เช•เชฟเชฒเชฐเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเซเช‚

Linux เชชเชฐ, เชคเชฎเซ‡ OOM-Killer เชจเซ‡ เชธเช•เซเชทเชฎ เช…เชฅเชตเชพ เช…เช•เซเชทเชฎ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (เชœเซ‹เช•เซ‡ เชฌเชพเชฆเชฎเชพเช‚ เช†เช—เซเชฐเชนเชฃเซ€เชฏ เชจเชฅเซ€). เชธเช•เซเชทเชฎ เช…เชฅเชตเชพ เช…เช•เซเชทเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชฟเชฎเชพเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ vm.oom-kill. เชฐเชจเชŸเชพเช‡เชฎ เชชเชฐ OOM-เช•เชฟเชฒเชฐเชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเซ‹ 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-เช•เชฟเชฒเชฐ เชฎเชพเชคเซเชฐ เชšเชพเชฒเซ เช…เชจเซ‡ เชฌเช‚เชง เช•เชฐเซ€ เชถเช•เชพเชคเซเช‚ เชจเชฅเซ€. เช…เชฎเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เชนเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชฒเชฟเชจเช•เซเชธ เช–เชฐเซ‡เช–เชฐ เชซเชพเชณเชตเซเชฏเชพ เชตเชฟเชจเชพ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ เชคเซ‡เชจเชพ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชฎเซ‡เชฎเชฐเซ€เชจเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชฎเชพเชŸเซ‡ เช…เชจเชพเชฎเชค เชฐเชพเช–เซ€ เชถเช•เซ‡ เช›เซ‡, เช…เชจเซ‡ เช† เชตเชฐเซเชคเชฃเซ‚เช• Linux เช•เชฐเซเชจเชฒ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เชฅเชพเชฏ เช›เซ‡. เช† เชฎเชพเชŸเซ‡ เชšเชฒ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡ vm.overcommit_memory.

เชคเชฎเซ‡ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:

0: เช•เชฐเซเชจเชฒ เชชเซ‹เชคเซ‡ เชœ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชถเซเช‚ เชตเชงเชพเชฐเซ‡ เชฎเซ‡เชฎเชฐเซ€ เชฐเชฟเชเชฐเซเชต เช•เชฐเชตเซ€. Linux เชจเชพ เชฎเซ‹เชŸเชพ เชญเชพเช—เชจเชพ เชตเชฐเซเชเชจ เชชเชฐ เช† เชกเชฟเชซเซ‹เชฒเซเชŸ เช›เซ‡.
1: เช•เชฐเซเชจเชฒ เชนเช‚เชฎเซ‡เชถเชพ เชตเชงเชพเชฐเชพเชจเซ€ เชฎเซ‡เชฎเชฐเซ€ เช…เชจเชพเชฎเชค เชฐเชพเช–เชถเซ‡. เช† เชœเซ‹เช–เชฎเซ€ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชฎเซ‡เชฎเชฐเซ€ เชธเชฎเชพเชชเซเชค เชฅเชˆ เชถเช•เซ‡ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡, เชธเช‚เชญเชตเชคเชƒ, เชเช• เชฆเชฟเชตเชธ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ เชคเซ‡เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡.
2: เช•เชฐเซเชจเชฒ เชชเชฐเชฟเชฎเชพเชฃเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช•เชฐเชคเชพเช‚ เชตเชงเซ เชฎเซ‡เชฎเชฐเซ€ เช…เชจเชพเชฎเชค เชฐเชพเช–เชถเซ‡ เชจเชนเซ€เช‚ overcommit_ratio.

เช† เชชเชฐเชฟเชฎเชพเชฃ เชธเชพเชฅเซ‡, เชคเชฎเซ‡ เชฎเซ‡เชฎเชฐเซ€เชจเซ€ เชŸเช•เชพเชตเชพเชฐเซ€เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ‹ เช›เซ‹ เชœเซ‡เชจเซ‡ เช“เชตเชฐ-เชฐเชฟเชเชฐเซเชต เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช›เซ‡. เชœเซ‹ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เชœเช—เซเชฏเชพ เชจ เชนเซ‹เชฏ, เชคเซ‹ เช•เซ‹เชˆ เชฎเซ‡เชฎเชฐเซ€ เชซเชพเชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจเชฅเซ€, เช…เชจเซ‡ เช†เชฐเช•เซเชทเชฃ เชจเช•เชพเชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. PostgreSQL เชฎเชพเชŸเซ‡ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ‡เชฒ เช† เชธเซŒเชฅเซ€ เชธเชฒเชพเชฎเชค เชตเชฟเช•เชฒเซเชช เช›เซ‡. OOM-เช•เชฟเชฒเชฐ เช…เชจเซเชฏ เชคเชคเซเชต เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชญเชพเชตเชฟเชค เชฅเชพเชฏ เช›เซ‡ - เชธเซเชตเซ‡เชชเชฟเช‚เช— เช•เซเชทเชฎเชคเชพ, เชœเซ‡ เชšเชฒ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เชฅเชพเชฏ เช›เซ‡ cat /proc/sys/vm/swappiness. เช† เชฎเซ‚เชฒเซเชฏเซ‹ เช•เชฐเซเชจเชฒเชจเซ‡ เชชเซ‡เชœเซ€เช‚เช—เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเชตเซเช‚ เชคเซ‡ เช•เชนเซ‡ เช›เซ‡. เชฎเซ‚เชฒเซเชฏ เชœเซ‡เชŸเชฒเซเช‚ เชŠเช‚เชšเซเช‚ เชนเชถเซ‡, OOM เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเซ‡ เชคเซ‡เชตเซ€ เชถเช•เซเชฏเชคเชพ เช“เช›เซ€ เช›เซ‡, เชชเชฐเช‚เชคเซ I/O เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ‡ เชฒเซ€เชงเซ‡ เชคเซ‡เชจเซ€ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชฐ เชจเช•เชพเชฐเชพเชคเซเชฎเช• เช…เชธเชฐ เชชเชกเซ‡ เช›เซ‡. เช…เชจเซ‡ เชŠเชฒเชŸเซเช‚ - เชฎเซ‚เชฒเซเชฏ เชœเซ‡เชŸเชฒเซเช‚ เช“เช›เซเช‚ เช›เซ‡, OOM-เช•เชฟเชฒเชฐ เชนเชธเซเชคเช•เซเชทเซ‡เชชเชจเซ€ เชธเช‚เชญเชพเชตเชจเชพ เชตเชงเชพเชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซเช‚ เชชเซเชฐเชฆเชฐเซเชถเชจ เชชเชฃ เชตเชงเชพเชฐเซ‡ เช›เซ‡. เชกเชฟเชซเซ‰เชฒเซเชŸ เชฎเซ‚เชฒเซเชฏ 60 เช›เซ‡, เชชเชฐเช‚เชคเซ เชœเซ‹ เชธเชฎเช—เซเชฐ เชกเซ‡เชŸเชพเชฌเซ‡เช เชฎเซ‡เชฎเชฐเซ€เชฎเชพเช‚ เชฌเช‚เชงเชฌเซ‡เชธเซ‡ เช›เซ‡, เชคเซ‹ เชฎเซ‚เชฒเซเชฏเชจเซ‡ 1 เชชเชฐ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡.

เชชเชฐเชฟเชฃเชพเชฎเซ‹

OOM-เช•เชฟเชฒเชฐเชฎเชพเช‚ "เช•เชฟเชฒเชฐ" เชจเซ‡ เชคเชฎเชจเซ‡ เชกเชฐเชพเชตเชตเชพ เชจ เชฆเซ‹. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช•เชฟเชฒเชฐ เชคเชฎเชพเชฐเซ€ เชธเชฟเชธเซเชŸเชฎเชจเซ‹ เชคเชพเชฐเชฃเชนเชพเชฐ เชนเชถเซ‡. เชคเซ‡ เชธเซŒเชฅเซ€ เช–เชฐเชพเชฌ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ "เชฎเชพเชฐเซ€ เชจเชพเช–เซ‡ เช›เซ‡" เช…เชจเซ‡ เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เช•เซเชฐเซ‡เชถ เชฅเชตเชพเชฅเซ€ เชฌเชšเชพเชตเซ‡ เช›เซ‡. PostgreSQL เชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ OOM-Killer เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เชŸเชพเชณเชตเชพ เชฎเชพเชŸเซ‡, เชชเชฐ เชธเซ‡เชŸ เช•เชฐเซ‹ vm.overcommit_memory เชฎเซ‚เชฒเซเชฏ 2. เช† เชฌเชพเช‚เชนเซ‡เชงเชฐเซ€ เช†เชชเชคเซเช‚ เชจเชฅเซ€ เช•เซ‡ OOM-เช•เชฟเชฒเชฐเชจเซ‡ เชนเชธเซเชคเช•เซเชทเซ‡เชช เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชคเซ‡ PostgreSQL เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเชตเชพเชจเซ€ เชซเชฐเชœ เชชเชพเชกเชตเชพเชจเซ€ เชธเช‚เชญเชพเชตเชจเชพเชจเซ‡ เช˜เชŸเชพเชกเชถเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹