เจตเจฟเฉฑเจš เจ†เจŠเจŸ-เจ†เจซ-เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจ•เจฟเจฒเจฐ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจ•เจฐเจจเจพ Linux PostgreSQL เจฒเจˆ

เจตเจฟเฉฑเจš เจ†เจŠเจŸ-เจ†เจซ-เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจ•เจฟเจฒเจฐ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจ•เจฐเจจเจพ Linux PostgreSQL เจฒเจˆ

เจœเจฆเฉ‹เจ‚ เจตเจฟเฉฑเจš Linux ัะตั€ะฒะตั€ ะฑะฐะทั‹ ะดะฐะฝะฝั‹ั… ะฝะตะฟั€ะตะดะฒะธะดะตะฝะฝะพ ะทะฐะฒะตั€ัˆะฐะตั‚ ั€ะฐะฑะพั‚ัƒ, ะฝัƒะถะฝะพ ะฝะฐะนั‚ะธ ะฟั€ะธั‡ะธะฝัƒ. ะŸั€ะธั‡ะธะฝ ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ะฝะตัะบะพะปัŒะบะพ. ะะฐะฟั€ะธะผะตั€, SIGSEGV โ€” เจฌเฉˆเจ•เจเจ‚เจก เจธเจฐเจตเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเฉฑเจ— เจ•เจพเจฐเจจ เจ…เจธเจซเจฒเจคเจพเฅค เจชเจฐ เจ‡เจน เจฆเฉเจฐเจฒเฉฑเจญ เจนเฉˆ. เจ…เจ•เจธเจฐ, เจคเฉเจนเจพเจกเฉ€ เจกเจฟเจธเจ• เจธเจชเฉ‡เจธ เจœเจพเจ‚ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจ–เจคเจฎ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจกเฉ€ เจกเจฟเจธเจ• เจธเจชเฉ‡เจธ เจ–เจคเจฎ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจคเจฐเฉ€เจ•เจพ เจนเฉˆ - เจธเจชเฉ‡เจธ เจ–เจพเจฒเฉ€ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ เจฐเฉ€เจธเจŸเจพเจฐเจŸ เจ•เจฐเฉ‹เฅค

เจ†เจŠเจŸ-เจ†เจซ-เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจ•เจพเจคเจฒ

เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจธเจฐเจตเจฐ ะธะปะธ ะฟั€ะพั†ะตััะฐ ะทะฐะบะฐะฝั‡ะธะฒะฐะตั‚ัั ะฟะฐะผัั‚ัŒ, Linux ะฟั€ะตะดะปะฐะณะฐะตั‚ 2 ะฟัƒั‚ะธ ั€ะตัˆะตะฝะธั: ะพะฑั€ัƒัˆะธั‚ัŒ ะฒััŽ ัะธัั‚ะตะผัƒ ะธะปะธ ะทะฐะฒะตั€ัˆะธั‚ัŒ ะฟั€ะพั†ะตัั (ะฟั€ะธะปะพะถะตะฝะธะต), ะบะพั‚ะพั€ั‹ะน ััŠะตะดะฐะตั‚ ะฟะฐะผัั‚ัŒ. ะ›ัƒั‡ัˆะต, ะบะพะฝะตั‡ะฝะพ, ะทะฐะฒะตั€ัˆะธั‚ัŒ ะฟั€ะพั†ะตัั ะธ ัะฟะฐัั‚ะธ ะžะก ะพั‚ ะฐะฒะฐั€ะธะนะฝะพะณะพ ะทะฐะฒะตั€ัˆะตะฝะธั. ะ’ ะดะฒัƒั… ัะปะพะฒะฐั…, Out-Of-Memory Killer โ€” ัั‚ะพ ะฟั€ะพั†ะตัั, ะบะพั‚ะพั€ั‹ะน ะทะฐะฒะตั€ัˆะฐะตั‚ ะฟั€ะธะปะพะถะตะฝะธะต, ั‡ั‚ะพะฑั‹ ัะฟะฐัั‚ะธ ัะดั€ะพ ะพั‚ ัะฑะพั. ะžะฝ ะถะตั€ั‚ะฒัƒะตั‚ ะฟั€ะธะปะพะถะตะฝะธะตะผ, ั‡ั‚ะพะฑั‹ ัะพั…ั€ะฐะฝะธั‚ัŒ ั€ะฐะฑะพั‚ัƒ ะžะก. ะ”ะฐะฒะฐะนั‚ะต ัะฝะฐั‡ะฐะปะฐ ะพะฑััƒะดะธะผ, ะบะฐะบ ั€ะฐะฑะพั‚ะฐะตั‚ OOM ะธ ะบะฐะบ ะตะณะพ ะบะพะฝั‚ั€ะพะปะธั€ะพะฒะฐั‚ัŒ, ะฐ ะฟะพั‚ะพะผ ะฟะพัะผะพั‚ั€ะธะผ, ะบะฐะบ OOM Killer ั€ะตัˆะฐะตั‚, ะบะฐะบะพะต ะฟั€ะธะปะพะถะตะฝะธะต ะทะฐะฒะตั€ัˆะธั‚ัŒ.

ะžะดะฝะฐ ะธะท ะณะปะฐะฒะฝั‹ั… ะทะฐะดะฐั‡ Linux โ€” ะฒั‹ะดะตะปัั‚ัŒ ะฟะฐะผัั‚ัŒ ะฟั€ะพั†ะตััะฐะผ, ะบะพะณะดะฐ ะพะฝะธ ะตะต ะฟั€ะพััั‚. ะžะฑั‹ั‡ะฝะพ ะฟั€ะพั†ะตัั ะธะปะธ ะฟั€ะธะปะพะถะตะฝะธะต ะทะฐะฟั€ะฐัˆะธะฒะฐัŽั‚ ัƒ ะžะก ะฟะฐะผัั‚ัŒ, ะฐ ัะฐะผะธ ะธัะฟะพะปัŒะทัƒัŽั‚ ะตะต ะฝะต ะฟะพะปะฝะพัั‚ัŒัŽ. ะ•ัะปะธ ะžะก ะฑัƒะดะตั‚ ะฒั‹ะดะฐะฒะฐั‚ัŒ ะฟะฐะผัั‚ัŒ ะฒัะตะผ, ะบั‚ะพ ะตะต ะฟั€ะพัะธั‚, ะฝะพ ะฝะต ะฟะปะฐะฝะธั€ัƒะตั‚ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ, ะพั‡ะตะฝัŒ ัะบะพั€ะพ ะฟะฐะผัั‚ัŒ ะทะฐะบะพะฝั‡ะธั‚ัั, ะธ ัะธัั‚ะตะผะฐ ะพั‚ะบะฐะถะตั‚. ะงั‚ะพะฑั‹ ัั‚ะพะณะพ ะธะทะฑะตะถะฐั‚ัŒ, ะžะก ั€ะตะทะตั€ะฒะธั€ัƒะตั‚ ะฟะฐะผัั‚ัŒ ะทะฐ ะฟั€ะพั†ะตััะพะผ, ะฝะพ ั„ะฐะบั‚ะธั‡ะตัะบะธ ะฝะต ะฒั‹ะดะฐะตั‚ ะตะต. ะŸะฐะผัั‚ัŒ ะฒั‹ะดะตะปัะตั‚ัั, ั‚ะพะปัŒะบะพ ะบะพะณะดะฐ ะฟั€ะพั†ะตัั ะดะตะนัั‚ะฒะธั‚ะตะปัŒะฝะพ ัะพะฑะธั€ะฐะตั‚ัั ะตะต ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ. ะกะปัƒั‡ะฐะตั‚ัั, ั‡ั‚ะพ ัƒ ะžะก ะฝะตั‚ ัะฒะพะฑะพะดะฝะพะน ะฟะฐะผัั‚ะธ, ะฝะพ ะพะฝะฐ ะทะฐะบั€ะตะฟะปัะตั‚ ะฟะฐะผัั‚ัŒ ะทะฐ ะฟั€ะพั†ะตััะพะผ, ะธ ะบะพะณะดะฐ ะฟั€ะพั†ะตัััƒ ะพะฝะฐ ะฝัƒะถะฝะฐ, ะžะก ะฒั‹ะดะตะปัะตั‚ ะตะต, ะตัะปะธ ะผะพะถะตั‚. ะœะธะฝัƒั ะฒ ั‚ะพะผ, ั‡ั‚ะพ ะธะฝะพะณะดะฐ ะžะก ั€ะตะทะตั€ะฒะธั€ัƒะตั‚ ะฟะฐะผัั‚ัŒ, ะฝะพ ะฒ ะฝัƒะถะฝั‹ะน ะผะพะผะตะฝั‚ ัะฒะพะฑะพะดะฝะพะน ะฟะฐะผัั‚ะธ ะฝะตั‚, ะธ ะฟั€ะพะธัั…ะพะดะธั‚ ัะฑะพะน ัะธัั‚ะตะผั‹. 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)

เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† 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-เจ•เจฟเจฒเจฐ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจฆเจพ เจนเฉˆ oom_kill_task(). เจ‡เจน เจซเฉฐเจ•เจธเจผเจจ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจธเจฎเจพเจชเจคเฉ€ เจธเจฟเจ—เจจเจฒ เจญเฉ‡เจœเจฆเจพ เจนเฉˆเฅค เจฏเจพเจฆเจฆเจพเจธเจผเจค เจฆเฉ€ เจ•เจฎเฉ€ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš oom_kill() เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจธเจฟเจ—เจ•เจฟเฉฑเจฒ เจธเจฟเจ—เจจเจฒ เจญเฉ‡เจœเจฃ เจฒเจˆ เจ‡เจธ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ•เจฐเจจเจฒ เจฒเฉŒเจ— เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจฒเจฟเจ–เจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

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-Killer ะผะพะถะฝะพ ะฝะต ั‚ะพะปัŒะบะพ ะฒะบะปัŽั‡ะฐั‚ัŒ ะธ ะฒั‹ะบะปัŽั‡ะฐั‚ัŒ. ะœั‹ ัƒะถะต ะณะพะฒะพั€ะธะปะธ, ั‡ั‚ะพ Linux ะผะพะถะตั‚ ะทะฐั€ะตะทะตั€ะฒะธั€ะพะฒะฐั‚ัŒ ะดะปั ะฟั€ะพั†ะตััะพะฒ ะฑะพะปัŒัˆะต ะฟะฐะผัั‚ะธ, ั‡ะตะผ ะตัั‚ัŒ, ะฝะพ ะฝะต ะฒั‹ะดะตะปัั‚ัŒ ะตะต ะฟะพ ั„ะฐะบั‚ัƒ, ะธ ัั‚ะธะผ ะฟะพะฒะตะดะตะฝะธะตะผ ัƒะฟั€ะฐะฒะปัะตั‚ ะฟะฐั€ะฐะผะตั‚ั€ ัะดั€ะฐ Linux. ะ—ะฐ ัั‚ะพ ะพั‚ะฒะตั‡ะฐะตั‚ ะฟะตั€ะตะผะตะฝะฝะฐั vm.overcommit_memory.

เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจฎเฉเฉฑเจฒ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

0: ัะดั€ะพ ัะฐะผะพ ั€ะตัˆะฐะตั‚, ัั‚ะพะธั‚ ะปะธ ั€ะตะทะตั€ะฒะธั€ะพะฒะฐั‚ัŒ ัะปะธัˆะบะพะผ ะผะฝะพะณะพ ะฟะฐะผัั‚ะธ. ะญั‚ะพ ะทะฝะฐั‡ะตะฝะธะต ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ ะฒ ะฑะพะปัŒัˆะธะฝัั‚ะฒะต ะฒะตั€ัะธะน Linux.
1: เจ•เจฐเจจเจฒ เจนเจฎเฉ‡เจธเจผเจพ เจตเจพเจงเฉ‚ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจฐเจฟเจœเจผเจฐเจต เจ•เจฐเฉ‡เจ—เจพเฅค เจ‡เจน เจ–เจผเจคเจฐเจจเจพเจ• เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจ–เจคเจฎ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ, เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจธเฉฐเจญเจพเจตเจจเจพ เจนเฉˆ, เจ‡เฉฑเจ• เจฆเจฟเจจ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ€ เจฒเฉ‹เฉœ เจชเจตเฉ‡เจ—เฉ€.
2: เจ•เจฐเจจเจฒ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ เจคเฉ‹เจ‚ เจตเฉฑเจง เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจฐเจพเจ–เจตเฉ€เจ‚ เจจเจนเฉ€เจ‚ เจ•เจฐเฉ‡เจ—เจพ overcommit_ratio.

เจ‡เจธ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฆเฉ‡ เจจเจพเจฒ, เจคเฉเจธเฉ€เจ‚ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจฆเจพ เจชเฉเจฐเจคเฉ€เจธเจผเจค เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเฉ‹ เจœเจฟเจธ เจจเฉ‚เฉฐ เจ“เจตเจฐ-เจฐเจฟเจœเจผเจฐเจต เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฑเจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจœเฉ‡ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ•เฉ‹เจˆ เจฅเจพเจ‚ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจคเจพเจ‚ เจ•เฉ‹เจˆ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจจเจฟเจฐเจงเจพเจฐเจค เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€, เจ…เจคเฉ‡ เจฐเจฟเจœเจผเจฐเจตเฉ‡เจธเจผเจจ เจคเฉ‹เจ‚ เจ‡เจจเจ•เจพเจฐ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค PostgreSQL เจฒเจˆ เจ‡เจน เจธเจญ เจคเฉ‹เจ‚ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจตเจฟเจ•เจฒเจช เจนเฉˆเฅค OOM-เจ•เจฟเจฒเจฐ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจคเฉฑเจค เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจญเจพเจตเจฟเจค เจนเฉเฉฐเจฆเจพ เจนเฉˆ - เจธเจตเฉˆเจชเจฟเฉฐเจ— เจธเจฎเจฐเฉฑเจฅเจพ, เจœเฉ‹ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเฉเจ†เจฐเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฟเจค เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ cat /proc/sys/vm/swappiness. เจ‡เจน เจฎเฉเฉฑเจฒ เจ•เจฐเจจเจฒ เจจเฉ‚เฉฐ เจฆเฉฑเจธเจฆเฉ‡ เจนเจจ เจ•เจฟ เจชเฉ‡เจœเจฟเฉฐเจ— เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉฐเจญเจพเจฒเจฃเจพ เจนเฉˆเฅค เจฎเฉเฉฑเจฒ เจœเจฟเฉฐเจจเจพ เจ‰เฉฑเจšเจพ เจนเฉ‹เจตเฉ‡เจ—เจพ, เจ“เจจเฉ€ เจนเฉ€ เจ˜เฉฑเจŸ เจธเฉฐเจญเจพเจตเจจเจพ เจนเฉˆ เจ•เจฟ OOM เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจ–เจคเจฎ เจ•เจฐ เจฆเฉ‡เจตเฉ‡เจ—เจพ, เจชเจฐ I/O เจ“เจชเจฐเฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ‡ เจ•เจพเจฐเจจ เจ‡เจธเจฆเจพ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ 'เจคเฉ‡ เจฎเจพเฉœเจพ เจชเฉเจฐเจญเจพเจต เจชเฉˆเจ‚เจฆเจพ เจนเฉˆเฅค เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจ‰เจฒเจŸ - เจฎเฉเฉฑเจฒ เจœเจฟเฉฐเจจเจพ เจ˜เฉฑเจŸ เจนเฉ‹เจตเฉ‡เจ—เจพ, เจ“เจ“เจเจฎ-เจ•เจฟเจฒเจฐ เจฆเจ–เจฒเจ…เฉฐเจฆเจพเจœเจผเฉ€ เจฆเฉ€ เจธเฉฐเจญเจพเจตเจจเจพ เจตเฉฑเจง เจนเฉˆ, เจชเจฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจ•เจพเจฐเจ—เฉเจœเจผเจพเจฐเฉ€ เจตเฉ€ เจตเฉฑเจง เจนเฉˆเฅค เจชเฉ‚เจฐเจต-เจจเจฟเจฐเจงเจพเจฐเจค เจฎเฉเฉฑเจฒ 60 เจนเฉˆ, เจชเจฐ เจœเฉ‡เจ•เจฐ เจธเจพเจฐเจพ เจกเจพเจŸเจพเจฌเฉ‡เจธ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจตเจฟเฉฑเจš เจซเจฟเฉฑเจŸ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจฎเฉเฉฑเจฒ เจจเฉ‚เฉฐ 1 'เจคเฉ‡ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค

เจจเจคเฉ€เจœเฉ‡

OOM-เจ•เจฟเจฒเจฐ เจตเจฟเฉฑเจš "เจ•เจพเจคเจฒ" เจจเฉ‚เฉฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจกเจฐเจพเจ‰เจฃ เจจเจพ เจฆเจฟเจ“เฅค เจ‡เจธ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจ•เจพเจคเจฒ เจคเฉเจนเจพเจกเฉ‡ เจธเจฟเจธเจŸเจฎ เจฆเจพ เจฎเฉเจ•เจคเฉ€เจฆเจพเจคเจพ เจนเฉ‹เจตเฉ‡เจ—เจพ. เจ‡เจน เจธเจญ เจคเฉ‹เจ‚ เจญเฉˆเฉœเฉ€เจ†เจ‚ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ "เจฎเจพเจฐเจฆเจพ" เจนเฉˆ เจ…เจคเฉ‡ เจธเจฟเจธเจŸเจฎ เจจเฉ‚เฉฐ เจ•เจฐเฉˆเจธเจผ เจนเฉ‹เจฃ เจคเฉ‹เจ‚ เจฌเจšเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค PostgreSQL เจจเฉ‚เฉฐ เจ–เจคเจฎ เจ•เจฐเจจ เจฒเจˆ OOM-Killer เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจšเจฃ เจฒเจˆ, เจ‡เจธ 'เจคเฉ‡ เจธเฉˆเฉฑเจŸ เจ•เจฐเฉ‹ vm.overcommit_memory เจฎเฉเฉฑเจฒ 2. เจ‡เจน เจ—เจพเจฐเฉฐเจŸเฉ€ เจจเจนเฉ€เจ‚ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟ OOM-เจ•เจฟเจฒเจฐ เจจเฉ‚เฉฐ เจฆเจ–เจฒ เจจเจนเฉ€เจ‚ เจฆเฉ‡เจฃเจพ เจชเจตเฉ‡เจ—เจพ, เจชเจฐ เจ‡เจน PostgreSQL เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจธเจฎเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจฎเจœเจฌเฉ‚เจฐ เจ•เจฐเจจ เจฆเฉ€ เจธเฉฐเจญเจพเจตเจจเจพ เจจเฉ‚เฉฐ เจ˜เจŸเจพ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค

เจธเจฐเฉ‹เจค: www.habr.com

DDoS เจธเฉเจฐเฉฑเจ–เจฟเจ†, VPS VDS เจธเจฐเจตเจฐเจพเจ‚ เจตเจพเจฒเฉ€เจ†เจ‚ เจธเจพเจˆเจŸเจพเจ‚ เจฒเจˆ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจนเฉ‹เจธเจŸเจฟเฉฐเจ— เจ–เจฐเฉ€เจฆเฉ‹ ๐Ÿ”ฅ DDoS เจธเฉเจฐเฉฑเจ–เจฟเจ†, VPS VDS เจธเจฐเจตเจฐเจพเจ‚ เจจเจพเจฒ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ เจนเฉ‹เจธเจŸเจฟเฉฐเจ— เจ–เจฐเฉ€เจฆเฉ‹ | ProHoster