PostgreSQL рд╕рд╛рдареА Linux рдордзреНрдпреЗ рдЖрдЙрдЯ-рдСрдл-рдореЗрдорд░реА рдХрд┐рд▓рд░ рд╕реЗрдЯ рдХрд░рдгреЗ

PostgreSQL рд╕рд╛рдареА Linux рдордзреНрдпреЗ рдЖрдЙрдЯ-рдСрдл-рдореЗрдорд░реА рдХрд┐рд▓рд░ рд╕реЗрдЯ рдХрд░рдгреЗ

рдЬреЗрд╡реНрд╣рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡реНрд╣рд░ рд▓рд┐рдирдХреНрд╕рдордзреНрдпреЗ рдЕрдирдкреЗрдХреНрд╖рд┐рддрдкрдгреЗ рдмрд╛рд╣реЗрд░ рдкрдбрддреЛ, рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд░рдг рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ. рдЕрдиреЗрдХ рдХрд╛рд░рдгреЗ рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, SIGSEGV тАФ рдмреЕрдХрдПрдВрдб рд╕рд░реНрд╡реНрд╣рд░рдордзреАрд▓ рдмрдЧрдореБрд│реЗ рдЕрдкрдпрд╢. рдкрдг рд╣реЗ рджреБрд░реНрдорд┐рд│ рдЖрд╣реЗ. рдмрд░реНтАНрдпрд╛рдЪрджрд╛, рддреБрдордЪреА рдбрд┐рд╕реНрдХ рд╕реНрдкреЗрд╕ рдХрд┐рдВрд╡рд╛ рдореЗрдорд░реА рд╕рдВрдкрддреЗ. рдЬрд░ рддреБрдордЪреА рдбрд┐рд╕реНрдХ рдЬрд╛рдЧрд╛ рд╕рдВрдкрд▓реА рддрд░, рдПрдХрдЪ рдорд╛рд░реНрдЧ рдЖрд╣реЗ - рдЬрд╛рдЧрд╛ рдореЛрдХрд│реА рдХрд░рд╛ рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рд╛.

рдЖрдЙрдЯ-рдСрдл-рдореЗрдорд░реА рдХрд┐рд▓рд░

рдЬреЗрд╡реНрд╣рд╛ рд╕рд░реНрд╡реНрд╣рд░ рдХрд┐рдВрд╡рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдорд░реА рд╕рдВрдкрддреЗ, рддреЗрд╡реНрд╣рд╛ рд▓рд┐рдирдХреНрд╕ 2 рдЙрдкрд╛рдп рдСрдлрд░ рдХрд░рддреЗ: рд╕рдВрдкреВрд░реНрдг рд╕рд┐рд╕реНрдЯрдо рдХреНрд░реЕрд╢ рдХрд░рд╛ рдХрд┐рдВрд╡рд╛ рдореЗрдорд░реА рдЦрд╛рдгрд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди) рд╕рдорд╛рдкреНрдд рдХрд░рд╛. рдЕрд░реНрдерд╛рддрдЪ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдгреЗ рдЖрдгрд┐ рдУрдПрд╕рд▓рд╛ рдХреНрд░реЕрд╢ рд╣реЛрдгреНрдпрд╛рдкрд╛рд╕реВрди рд╡рд╛рдЪрд╡рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ. рдереЛрдбрдХреНрдпрд╛рдд, рдЖрдЙрдЯ-рдСрдл-рдореЗрдорд░реА рдХрд┐рд▓рд░ рд╣реА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд╣реЗ рдЬреА рдХрд░реНрдирд▓рд▓рд╛ рдХреНрд░реЕрд╢ рд╣реЛрдгреНрдпрд╛рдкрд╛рд╕реВрди рд╡рд╛рдЪрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╖реНрдЯ рдХрд░рддреЗ. рд╣реЗ рдУрдПрд╕ рдЪрд╛рд▓реВ рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪрд╛ рддреНрдпрд╛рдЧ рдХрд░рддреЗ. рдкреНрд░рдердо OOM рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдЖрдгрд┐ рддреЗ рдХрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рд╛рдпрдЪреЗ рдпрд╛рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░реВ рдЖрдгрд┐ рдирдВрддрд░ OOM рдХрд┐рд▓рд░ рдХреЛрдгрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдорд╛рдкреНрдд рдХрд░рд╛рдпрдЪрд╛ рд╣реЗ рдХрд╕реЗ рдард░рд╡рддреЗ рддреЗ рдкрд╛рд╣реВ.

рд▓рд┐рдирдХреНрд╕рдЪреНрдпрд╛ рдореБрдЦреНрдп рдХрд╛рдорд╛рдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгрдЬреЗ рдореЗрдорд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдирд╛ рд╡рд╛рдЯрдк рдХрд░рдгреЗ рдЬреЗрд╡реНрд╣рд╛ рддреЗ рд╡рд┐рдЪрд╛рд░рддрд╛рдд. рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд┐рдВрд╡рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ 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() рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдорд╛рдВрдиреБрд╕рд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд╡рдбрддреЗ.

  1. рдХрд░реНрдирд▓рд▓рд╛ рд╕реНрд╡рддрдГрд╕рд╛рдареА рдХрд╛рд╣реА рдХрд┐рдорд╛рди рдореЗрдорд░реА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ.
  2. рддреБрдореНрд╣рд╛рд▓рд╛ рднрд░рдкреВрд░ рдореЗрдорд░реА рдореЛрдХрд│реА рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ.
  3. рдХрдореА рдореЗрдорд░реА рд╡рд╛рдкрд░рдгрд╛рд▒реНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдкреБрд╖реНрдЯрд╛рдд рдЖрдгрдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА.
  4. рдХрд┐рдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реНрдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
  5. рдЬрдЯрд┐рд▓ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЬреЗ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрд╕рд╛рдареА рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рд╡рд╛рдврд╡рддрд╛рдд.

рдпрд╛ рд╕рд░реНрд╡ рддрдкрд╛рд╕рдгреНрдпрд╛ рдкреВрд░реНрдг рдХреЗрд▓реНрдпрд╛рд╡рд░, 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
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-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

рдпрд╛ рдЖрджреЗрд╢рд╛рдЪрд╛ рдкрд░рд┐рдгрд╛рдо рдХрд╛рдпрдордЪрд╛ рдЬрддрди рдХреЗрд▓рд╛ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдХреЗрд╡рд│ рдкреНрд░рдердо рд░реАрдмреВрдЯ рд╣реЛрдИрдкрд░реНрдпрдВрдд. рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдзрд┐рдХ рдЪрд┐рдХрд╛рдЯреА рд╣рд╡реА рдЕрд╕рд▓реНрдпрд╛рд╕, рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╣реА рдУрд│ рдЬреЛрдбрд╛ /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

рдУрдУрдПрдо-рдХрд┐рд▓рд░ рдХреЗрд╡рд│ рдЪрд╛рд▓реВ рдЖрдгрд┐ рдмрдВрдж рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА. рдЖрдореНрд╣реА рдЖрдзреАрдЪ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рдЖрд╣реЗ рдХреА рд▓рд┐рдирдХреНрд╕ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд╡рд╛рдЯрдк рди рдХрд░рддрд╛ рдЙрдкрд▓рдмреНрдз рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рдЕрдзрд┐рдХ рдореЗрдорд░реА рд░рд╛рдЦреВрди рдареЗрд╡реВ рд╢рдХрддреЗ рдЖрдгрд┐ рд╣реЗ рд╡рд░реНрддрди рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓ рдкреЕрд░рд╛рдореАрдЯрд░рджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛