
рдордзреНрдпреЗ рдЕрд╕рддрд╛рдирд╛ Linux рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡реНрд╣рд░ рдЕрдирдкреЗрдХреНрд╖рд┐рддрдкрдгреЗ рдмрдВрдж рдкрдбрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдХрд╛рд░рдг рд╢реЛрдзрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛рдЪреА рдЕрдиреЗрдХ рдХрд╛рд░рдгреЗ рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, SIGSEGV тАФ рдмреЕрдХрдПрдВрдб рд╕рд░реНрд╡реНрд╣рд░рдордзреАрд▓ рдмрдЧрдореБрд│реЗ рдЕрдкрдпрд╢. рдкрдг рд╣реЗ рджреБрд░реНрдорд┐рд│ рдЖрд╣реЗ. рдмрд░реНтАНрдпрд╛рдЪрджрд╛, рддреБрдордЪреА рдбрд┐рд╕реНрдХ рд╕реНрдкреЗрд╕ рдХрд┐рдВрд╡рд╛ рдореЗрдорд░реА рд╕рдВрдкрддреЗ. рдЬрд░ рддреБрдордЪреА рдбрд┐рд╕реНрдХ рдЬрд╛рдЧрд╛ рд╕рдВрдкрд▓реА рддрд░, рдПрдХрдЪ рдорд╛рд░реНрдЧ рдЖрд╣реЗ - рдЬрд╛рдЧрд╛ рдореЛрдХрд│реА рдХрд░рд╛ рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рд╛.
рдЖрдЙрдЯ-рдСрдл-рдореЗрдорд░реА рдХрд┐рд▓рд░
рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рд╕рд░реНрд╡реНрд╣рд░ рдХрд┐рдВрд╡рд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреА рдореЗрдорд░реА рд╕рдВрдкрддреЗ, Linux рдЖрдЙрдЯ-рдСрдл-рдореЗрдорд░реА рдХрд┐рд▓рд░ рджреЛрди рдЙрдкрд╛рдп рд╕реБрдЪрд╡рддреЛ: рд╕рдВрдкреВрд░реНрдг рд╕рд┐рд╕реНрдЯрдо рдХреНрд░реЕрд╢ рдХрд░рдгреЗ рдХрд┐рдВрд╡рд╛ рдореЗрдорд░реА рд╡рд╛рдкрд░рдгрд╛рд░реА рдкреНрд░реЛрд╕реЗрд╕ (ре▓рдкреНрд▓рд┐рдХреЗрд╢рди) рдмрдВрдж рдХрд░рдгреЗ. рдЕрд░реНрдерд╛рддрдЪ, рдкреНрд░реЛрд╕реЗрд╕ рдмрдВрдж рдХрд░реВрди OS рд▓рд╛ рдХреНрд░реЕрд╢ рд╣реЛрдгреНрдпрд╛рдкрд╛рд╕реВрди рд╡рд╛рдЪрд╡рдгреЗ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ. рдереЛрдбрдХреНрдпрд╛рдд, рдЖрдЙрдЯ-рдСрдл-рдореЗрдорд░реА рдХрд┐рд▓рд░ рд╣реА рдПрдХ рдЕрд╢реА рдкреНрд░реЛрд╕реЗрд╕ рдЖрд╣реЗ рдЬреА рдХрд░реНрдирд▓рд▓рд╛ рдХреНрд░реЕрд╢ рд╣реЛрдгреНрдпрд╛рдкрд╛рд╕реВрди рд╡рд╛рдЪрд╡рдгреНрдпрд╛рд╕рд╛рдареА ре▓рдкреНрд▓рд┐рдХреЗрд╢рди рдмрдВрдж рдХрд░рддреЗ. OS рдЪрд╛рд▓реВ рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА рддреА ре▓рдкреНрд▓рд┐рдХреЗрд╢рдирдЪрд╛ рдмрд│реА рджреЗрддреЗ. рдЪрд▓рд╛, рдкреНрд░рдердо OOM рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рдХрд╕реЗ рдареЗрд╡рд╛рдпрдЪреЗ рдпрд╛рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░реВрдпрд╛, рдЖрдгрд┐ рдирдВрддрд░ OOM рдХрд┐рд▓рд░ рдХреЛрдгрддреЗ ре▓рдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдмрдВрдж рдХрд░рд╛рдпрдЪреЗ рд╣реЗ рдХрд╕реЗ рдард░рд╡рддреЛ рддреЗ рдкрд╛рд╣реВрдпрд╛.
рдореБрдЦреНрдп рдХрд╛рдорд╛рдВрдкреИрдХреА рдПрдХ Linux рдЬреЗрд╡реНрд╣рд╛ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдорд░реАрдЪреА рдорд╛рдЧрдгреА рдХрд░рддрд╛рдд, рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдВрдирд╛ рддреА рд╡рд╛рдЯрдк рдХрд░рд╛. рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдПрдЦрд╛рджреА рдкреНрд░реЛрд╕реЗрд╕ рдХрд┐рдВрд╡рд╛ ре▓рдкреНрд▓рд┐рдХреЗрд╢рди OS рдХрдбреВрди рдореЗрдорд░реАрдЪреА рдорд╛рдЧрдгреА рдХрд░рддреЗ, рдкрд░рдВрддреБ рддреА рдкреВрд░реНрдгрдкрдгреЗ рд╡рд╛рдкрд░рдд рдирд╛рд╣реА. рдЬрд░ OS рдиреЗ рдорд╛рдЧрдгреА рдХрд░рдгрд╛рд▒реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рд▓рд╛ рдореЗрдорд░реА рд╡рд╛рдЯрдк рдХреЗрд▓реА, рдкрдг рддреА рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдирд╕реЗрд▓, рддрд░ рд╕рд┐рд╕реНрдЯрдордордзреАрд▓ рдореЗрдорд░реА рд▓рд╡рдХрд░рдЪ рд╕рдВрдкреЗрд▓ рдЖрдгрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреНрд░реЕрд╢ рд╣реЛрдИрд▓. рд╣реЗ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА, OS рдПрдХрд╛ рдкреНрд░реЛрд╕реЗрд╕рд╕рд╛рдареА рдореЗрдорд░реА рд░рд╛рдЦреВрди рдареЗрд╡рддреЗ, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рддреА рд╡рд╛рдЯрдк рдХрд░рдд рдирд╛рд╣реА. рдореЗрдорд░реА рддреЗрд╡реНрд╣рд╛рдЪ рд╡рд╛рдЯрдк рдХреЗрд▓реА рдЬрд╛рддреЗ, рдЬреЗрд╡реНрд╣рд╛ рдПрдЦрд╛рджреНрдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рдЪрд╛ рддреА рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдЦрд░рд╛ рд╣реЗрддреВ рдЕрд╕рддреЛ. рдХрдзреАрдХрдзреА OS рдХрдбреЗ рдореЛрдХрд│реА рдореЗрдорд░реА рдирд╕рддреЗ, рдкрд░рдВрддреБ рддреА рдПрдХрд╛ рдкреНрд░реЛрд╕реЗрд╕рд╕рд╛рдареА рдореЗрдорд░реА рд╡рд╛рдЯрдк рдХрд░рддреЗ, рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рдкреНрд░реЛрд╕реЗрд╕рд▓рд╛ рддрд┐рдЪреА рдЧрд░рдЬ рдЕрд╕рддреЗ, рддреЗрд╡реНрд╣рд╛ рд╢рдХреНрдп рдЕрд╕рд▓реНрдпрд╛рд╕ OS рддреА рд╡рд╛рдЯрдк рдХрд░рддреЗ. рдпрд╛рдЪрд╛ рддреЛрдЯрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдХрдзреАрдХрдзреА OS рдореЗрдорд░реА рд░рд╛рдЦреВрди рдареЗрд╡рддреЗ, рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ рдЧрд░рдЬ рдЕрд╕рддреЗ, рддреЗрд╡реНрд╣рд╛ рдореЛрдХрд│реА рдореЗрдорд░реА рдЙрдкрд▓рдмреНрдз рдирд╕рддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рд╕рд┐рд╕реНрдЯрдо рдХреНрд░реЕрд╢ рд╣реЛрддреЗ. рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд OOM (рдЖрдЙрдЯ рдСрдл рдореЗрдорд░реА) рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреА рднреВрдорд┐рдХрд╛ рдмрдЬрд╛рд╡рддреЗ, рдХрд░реНрдирд▓рд▓рд╛ рдкреЕрдирд┐рдХ рд╣реЛрдгреНрдпрд╛рдкрд╛рд╕реВрди рд░реЛрдЦрдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░реЛрд╕реЗрд╕ рдмрдВрдж рдХрд░рддреЗ. рдЬреЗрд╡реНрд╣рд╛ PostgreSQL рдкреНрд░реЛрд╕реЗрд╕ рдЬрдмрд░рджрд╕реНрддреАрдиреЗ рдмрдВрдж рдХреЗрд▓реА рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рд▓реЙрдЧрдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рд╕рдВрджреЗрд╢ рджрд┐рд╕рддреЛ:
Out of Memory: Killed process 12345 (postgres).рдЬрд░ рд╕рд┐рд╕реНрдЯрдордЪреА рдореЗрдорд░реА рдХрдореА рдЕрд╕реЗрд▓ рдЖрдгрд┐ рддреА рдореБрдХреНрдд рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрдд рдирд╕реЗрд▓, рддрд░ рдлрдВрдХреНрд╢рди рдореНрд╣рдгрддрд╛рдд out_of_memory. рдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░, рддрд┐рдЪреНрдпрд╛рдХрдбреЗ рдлрдХреНрдд рдПрдХ рдЧреЛрд╖реНрдЯ рдмрд╛рдХреА рдЖрд╣реЗ - рдПрдХ рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реНрдг рдХрд░рд╛. рдУрдУрдПрдо-рдХрд┐рд▓рд░рдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрд╛рдмрдбрддреЛрдм рд╕рдВрдкреБрд╖реНрдЯрд╛рдд рдЖрдгрд▓реА рдкрд╛рд╣рд┐рдЬреЗ рдХреА рддреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реВ рд╢рдХрддреЗ? рдЙрдШрдбрдкрдгреЗ, рдЬреЗрд╡реНрд╣рд╛ out_of_memory рдХреЙрд▓ рдХреЗрд▓реА рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рддреЗ I/O рдСрдкрд░реЗрд╢рди рдХрд┐рдВрд╡рд╛ рдбрд┐рд╕реНрдХрд╡рд░ рдкреЗрдЬрд┐рдВрдЧрдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ рд╣реЛрддреЗ. рдореНрд╣рдгреВрди, OOM рдХрд┐рд▓рд░рдиреЗ рдкреНрд░рдердо рддрдкрд╛рд╕рдгреА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐, рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЖрдзрд╛рд░рд╛рд╡рд░, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЦрд╛рд▓реАрд▓ рд╕рд░реНрд╡ рддрдкрд╛рд╕рдгреНрдпрд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрд╕рд▓реНрдпрд╛рд╕, OOM рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрд▓.
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд╡рдб
рдореЗрдорд░реА рд╕рдВрдкрд▓реА рдХреА рдлрдВрдХреНрд╢рди рдореНрд╣рдгрддрд╛рдд out_of_memory(). рддреНрдпрд╛рдЪреЗ рдПрдХ рдХрд╛рд░реНрдп рдЖрд╣реЗ select_bad_process(), рдЬреЗ рдлрдВрдХреНрд╢рдирдХрдбреВрди рдореВрд▓реНрдпрд╛рдВрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ badness(). "рд╕рд░реНрд╡рд╛рдд рд╡рд╛рдИрдЯ" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рдХреНрд╖реНрдпрд┐рдд рдХреЗрд▓реА рдЬрд╛рдИрд▓. рдХрд╛рд░реНрдп badness() рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдорд╛рдВрдиреБрд╕рд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд╡рдбрддреЗ.
- рдХрд░реНрдирд▓рд▓рд╛ рд╕реНрд╡рддрдГрд╕рд╛рдареА рдХрд╛рд╣реА рдХрд┐рдорд╛рди рдореЗрдорд░реА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ.
- рддреБрдореНрд╣рд╛рд▓рд╛ рднрд░рдкреВрд░ рдореЗрдорд░реА рдореЛрдХрд│реА рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ.
- рдХрдореА рдореЗрдорд░реА рд╡рд╛рдкрд░рдгрд╛рд▒реНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдкреБрд╖реНрдЯрд╛рдд рдЖрдгрдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА.
- рдХрд┐рдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реНрдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
- рдЬрдЯрд┐рд▓ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЬреЗ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрд╕рд╛рдареА рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рд╡рд╛рдврд╡рддрд╛рдд.
рдпрд╛ рд╕рд░реНрд╡ рддрдкрд╛рд╕рдгреНрдпрд╛ рдкреВрд░реНрдг рдХреЗрд▓реНрдпрд╛рд╡рд░, OOM рдЧреБрдгрд╛рдВрдЪреА рддрдкрд╛рд╕рдгреА рдХрд░рддреЗ (oom_score). OOM рдирд┐рдпреБрдХреНрдд рдХрд░рддреЗ oom_score рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдЖрдгрд┐ рдирдВрддрд░ рд╣реЗ рдореВрд▓реНрдп рдореЗрдорд░реАрдЪреНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдЧреБрдгрд╛рдХрд╛рд░ рдХрд░рддреЗ. рдореЛрдареНрдпрд╛ рдореВрд▓реНрдпрд╛рдВрд╕рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ OOM рдХрд┐рд▓рд░рд▓рд╛ рдмрд│реА рдкрдбрдгреНрдпрд╛рдЪреА рдЕрдзрд┐рдХ рд╢рдХреНрдпрддрд╛ рдЕрд╕рддреЗ. рд░реВрдЯ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдЪрд╛ рд╕реНрдХреЛрдЕрд░ рдХрдореА рдЕрд╕рддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рд╕рдХреНрддреАрдиреЗ рд╕рдВрдкреБрд╖реНрдЯрд╛рдд рдЖрдгрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдХрдореА рдЕрд╕рддреЗ.
postgres=# SELECT pg_backend_pid();
pg_backend_pid
----------------
3813
(1 row)рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдпрдбреА 3813 рдЖрд╣реЗ, рдореНрд╣рдгреВрди рджреБрд╕рд░реНтАНрдпрд╛ рд╢реЗрд▓рдордзреНрдпреЗ рдХрд░реНрдирд▓ рдкреЕрд░рд╛рдореАрдЯрд░ рд╡рд╛рдкрд░реВрди рдЧреБрдг рдорд┐рд│рд╡рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ. oom_score:
vagrant@vagrant:~$ sudo cat /proc/3813/oom_score
2OOM-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 рдХрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рд╛рд╡реЗ
╨Т Linux рддреБрдореНрд╣реА OOM-Killer рдЪрд╛рд▓реВ рдХрд┐рдВрд╡рд╛ рдмрдВрдж рдХрд░реВ рд╢рдХрддрд╛ (рдорд╛рддреНрд░, рдмрдВрдж рдХрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓реА рдирд╛рд╣реА). рддреЗ рдЪрд╛рд▓реВ рдХрд┐рдВрд╡рд╛ рдмрдВрдж рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкреЕрд░рд╛рдореАрдЯрд░ рд╡рд╛рдкрд░рд╛. vm.oom-kill. рд░рдирдЯрд╛рдЗрдорд╡рд░ OOM-Killer рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛ sysctl.
sudo -s sysctl -w vm.oom-kill = 1OOM-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 рд╕рд╛рдареА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓рд╛ рд╣рд╛ рд╕рд░реНрд╡рд╛рдд рд╕реБрд░рдХреНрд╖рд┐рдд рдкрд░реНрдпрд╛рдп рдЖрд╣реЗ. рдУрдУрдПрдо-рдХрд┐рд▓рд░ рджреБрд╕рд░реНрдпрд╛ рдШрдЯрдХрд╛рдиреЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЛ - рд╕реНрд╡реЕрдкрд┐рдВрдЧ рдХреНрд╖рдорддрд╛, рдЬреА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ. cat /proc/sys/vm/swappiness. рд╣реА рдореВрд▓реНрдпреЗ рдкреЗрдЬрд┐рдВрдЧ рдХрд╢реА рд╣рд╛рддрд╛рд│рд╛рдпрдЪреА рд╣реЗ рдХрд░реНрдирд▓рд▓рд╛ рд╕рд╛рдВрдЧрддрд╛рдд. рдореВрд▓реНрдп рдЬрд┐рддрдХреЗ рдЬрд╛рд╕реНрдд рдЕрд╕реЗрд▓ рддрд┐рддрдХреА OOM рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдкреБрд╖реНрдЯрд╛рдд рдЖрдгрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдХрдореА рдЕрд╕рддреЗ, рдкрд░рдВрддреБ I/O рдСрдкрд░реЗрд╢рдиреНрд╕рдореБрд│реЗ рдбреЗрдЯрд╛рдмреЗрд╕рд╡рд░ рддреНрдпрд╛рдЪрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдкрдбрддреЛ. рдЖрдгрд┐ рддреНрдпрд╛рдЙрд▓рдЯ - рдореВрд▓реНрдп рдЬрд┐рддрдХреЗ рдХрдореА рдЕрд╕реЗрд▓ рддрд┐рддрдХреЗ рдУрдУрдПрдо-рдХрд┐рд▓рд░ рд╣рд╕реНрддрдХреНрд╖реЗрдкрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЬрд╛рд╕реНрдд рдЕрд╕рддреЗ, рдкрд░рдВрддреБ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рджреЗрдЦреАрд▓ рдЬрд╛рд╕реНрдд рдЕрд╕рддреЗ. рдбреАрдлреЙрд▓реНрдЯ рдореВрд▓реНрдп 60 рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдорд░реАрдордзреНрдпреЗ рдмрд╕рд▓реНрдпрд╛рд╕, рдореВрд▓реНрдп 1 рд╡рд░ рд╕реЗрдЯ рдХрд░рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ.
рдкрд░рд┐рдгрд╛рдо
OOM-Killer рдордзреАрд▓ "рдХрд┐рд▓рд░" рддреБрдореНрд╣рд╛рд▓рд╛ рдШрд╛рдмрд░реВ рджреЗрдК рдирдХрд╛. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдХрд┐рд▓рд░ рдЖрдкрд▓реНрдпрд╛ рд╕рд┐рд╕реНрдЯрдордЪрд╛ рддрд╛рд░рдгрд╣рд╛рд░ рдЕрд╕реЗрд▓. рд╣реЗ рд╕рд░реНрд╡рд╛рдд рд╡рд╛рдИрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдирд╛ "рдорд╛рд░реВрди рдЯрд╛рдХрддреЗ" рдЖрдгрд┐ рд╕рд┐рд╕реНрдЯрдорд▓рд╛ рдХреНрд░реЕрд╢ рд╣реЛрдгреНрдпрд╛рдкрд╛рд╕реВрди рд╡рд╛рдЪрд╡рддреЗ. PostgreSQL рд╕рдорд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА OOM-Killer рд╡рд╛рдкрд░рдгреЗ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд░ рд╕реЗрдЯ рдХрд░рд╛ vm.overcommit_memory рдореВрд▓реНрдп 2. рд╣реЗ OOM-рдХрд┐рд▓рд░рд▓рд╛ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрдгрд╛рд░ рдирд╛рд╣реА рдпрд╛рдЪреА рд╣рдореА рджреЗрдд тАЛтАЛрдирд╛рд╣реА, рдкрд░рдВрддреБ рдпрд╛рдореБрд│реЗ PostgreSQL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдгреНрдпрд╛рд╕ рднрд╛рдЧ рдкрд╛рдбрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдХрдореА рд╣реЛрдИрд▓.
рд╕реНрддреНрд░реЛрдд: www.habr.com
