PostgreSQL рдХрд╛ рд▓рд╛рдЧрд┐ рд▓рд┐рдирдХреНрд╕рдорд╛ рдЖрдЙрдЯ-рдЕрдл-рдореЗрдореЛрд░реА рдХрд┐рд▓рд░ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

PostgreSQL рдХрд╛ рд▓рд╛рдЧрд┐ рд▓рд┐рдирдХреНрд╕рдорд╛ рдЖрдЙрдЯ-рдЕрдл-рдореЗрдореЛрд░реА рдХрд┐рд▓рд░ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

рдЬрдм рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕рд░реНрднрд░рд▓реЗ рд▓рд┐рдирдХреНрд╕рдорд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдкрдорд╛ рдЫреЛрдбреНрдЫ, рддрдкрд╛рдИрдВрд▓реЗ рдХрд╛рд░рдг рдЦреЛрдЬреНрдиреБрдкрд░реНрдЫред рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдХрд╛рд░рдг рд╣реБрди рд╕рдХреНрдЫред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, SIGSEGV - рдмреНрдпрд╛рдХрдЗрдиреНрдб рд╕рд░реНрднрд░рдорд╛ рдмрдЧрдХреЛ рдХрд╛рд░рдг рдЕрд╕рдлрд▓рддрд╛ред рддрд░ рдпреЛ рджреБрд░реНрд▓рдн рдЫред рдкреНрд░рд╛рдпрдЬрд╕реЛ, рддрдкрд╛рдЗрдБ рдХреЗрд╡рд▓ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рд╡рд╛ рдореЗрдореЛрд░реА рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБрдХреЛ рдбрд┐рд╕реНрдХ рд╕реНрдкреЗрд╕ рд╕рдХрд┐рдпреЛ рднрдиреЗ, рддреНрдпрд╣рд╛рдБ рдПрдХ рдорд╛рддреНрд░ рддрд░рд┐рдХрд╛ рдЫ - рдард╛рдЙрдБ рдЦрд╛рд▓реА рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдбрд╛рдЯрд╛рдмреЗрд╕ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

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

рдЬрдм рд╕рд░реНрднрд░ рд╡рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдореЛрд░реА рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫ, рд▓рд┐рдирдХреНрд╕рд▓реЗ 2 рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ: рд╕рдореНрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рдХреНрд░реНрдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╡рд╛ рдореЗрдореЛрд░реА рдЦрд╛рдЗрд░рд╣реЗрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди) рд╕рдорд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рдЧрд░реНрди рд░ OS рд▓рд╛рдИ рдХреНрд░реНрдпрд╛рд╕ рд╣реБрдирдмрд╛рдЯ рдмрдЪрд╛рдЙрди рд░рд╛рдореНрд░реЛ рдЫред рд╕рдВрдХреНрд╖реЗрдкрдорд╛, рдЖрдЙрдЯ-рдЕрдл-рдореЗрдореЛрд░реА рдХрд┐рд▓рд░ рдПрдЙрдЯрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛ рдЬрд╕рд▓реЗ рдХрд░реНрдиреЗрд▓рд▓рд╛рдИ рдХреНрд░реНрдпрд╛рд╕ рд╣реБрдирдмрд╛рдЯ рдмрдЪрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдорд╛рд░реНрдЫред рдпрд╕рд▓реЗ OS рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рд░рд╛рдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдмрд▓рд┐рджрд╛рди рджрд┐рдиреНрдЫред рдЖрдЙрдиреБрд╣реЛрд╕реН рдкрд╣рд┐рд▓реЗ OOM рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдЫрд▓рдлрд▓ рдЧрд░реМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ OOM рдХрд┐рд▓рд░рд▓реЗ рдХреБрди рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рд╕рдорд╛рдкреНрдд рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдЫ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред

рд▓рд┐рдирдХреНрд╕рдХреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдорд╛ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрдиреБ рд╣реЛ рдЬрдм рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╕реЛрдзреНрдЫрдиреНред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ OS рдмрд╛рдЯ рдореЗрдореЛрд░реА рдЕрдиреБрд░реЛрдз рдЧрд░реНрджрдЫ, рддрд░ рдпрд╕рд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрдиред рдпрджрд┐ OS рд▓реЗ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╕реЛрдзреНрдиреЗ рд╕рдмреИрд▓рд╛рдИ рдореЗрдореЛрд░реА рджрд┐рдиреНрдЫ рддрд░ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдХреБрдиреИ рдпреЛрдЬрдирд╛ рдЫреИрди рднрдиреЗ, рдЪрд╛рдБрдбреИ рдореЗрдореЛрд░реА рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗрдЫ рд░ рдкреНрд░рдгрд╛рд▓реА рдЕрд╕рдлрд▓ рд╣реБрдиреЗрдЫред рдпрд╕рдмрд╛рдЯ рдмрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐, OS рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдореЗрдореЛрд░реА рдЖрд░рдХреНрд╖рд┐рдд рдЧрд░реНрджрдЫ, рддрд░ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдпрд╕рд▓рд╛рдИ рд░рд┐рд▓реАрдЬ рдЧрд░реНрджреИрдиред рдореЗрдореЛрд░реА рддрдм рдорд╛рддреНрд░ рдЖрд╡рдВрдЯрд┐рдд рд╣реБрдиреНрдЫ рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЬрд╛рдБрджреИрдЫред рдпреЛ рд╣реБрдиреНрдЫ рдХрд┐ OS рдорд╛ рдирд┐: рд╢реБрд▓реНрдХ рдореЗрдореЛрд░реА рдЫреИрди, рддрд░ рдпрд╕рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдореЗрдореЛрд░реА рдЕрд╕рд╛рдЗрди рдЧрд░реНрджрдЫ, рд░ рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫ, OS рд▓реЗ рдпрд╕рд▓рд╛рдИ рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрджрдЫ рдпрджрд┐ рдпреЛ рд╕рдореНрднрд╡ рдЫред рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпреЛ рд╣реЛ рдХрд┐ рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ OS рд▓реЗ рдореЗрдореЛрд░реА рд░рд┐рдЬрд░реНрдн рдЧрд░реНрджрдЫ, рддрд░ рд╕рд╣реА рд╕рдордпрдорд╛ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдирд┐: рд╢реБрд▓реНрдХ рдореЗрдореЛрд░реА рдЫреИрди, рд░ рдкреНрд░рдгрд╛рд▓реА рдХреНрд░реНрдпрд╛рд╕ рд╣реБрдиреНрдЫред OOM рд▓реЗ рдпрд╕ рдкрд░рд┐рджреГрд╢реНрдпрдорд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдЦреЗрд▓реНрдЫ рд░ рдХрд░реНрдиреЗрд▓рд▓рд╛рдИ рдЖрддрдВрдХрд┐рдд рд╣реБрдирдмрд╛рдЯ рд░реЛрдХреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рд╕рдорд╛рдкреНрдд рдЧрд░реНрдЫред рдЬрдм PostgreSQL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рдЧрд░реНрди рдмрд╛рдзреНрдп рд╣реБрдиреНрдЫ, рд▓рдЧрдорд╛ рд╕рдиреНрджреЗрд╢ рджреЗрдЦрд╛ рдкрд░реНрджрдЫ:

Out of Memory: Killed process 12345 (postgres).

рдпрджрд┐ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдореЗрдореЛрд░реА рдХрдо рдЫ рд░ рдпрд╕рд▓рд╛рдИ рдореБрдХреНрдд рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди рднрдиреЗ, рдкреНрд░рдХрд╛рд░реНрдп рднрдирд┐рдиреНрдЫ out_of_memoryред рдпрд╕ рдЪрд░рдгрдорд╛, рдЙрдиреАрд╕рдБрдЧ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рдорд╛рддреНрд░ рдХреБрд░рд╛ рдмрд╛рдБрдХреА рдЫ - рдПрдХ рд╡рд╛ рдмрдвреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред OOM-Killer рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреБрд░реБрдиреНрддреИ рд╕рдорд╛рдкреНрдд рдЧрд░реНрдиреБрдкрд░реНрдЫ рд╡рд╛ рдкрд░реНрдЦрди рд╕рдХреНрдЫ? рдЬрд╛рд╣рд┐рд░ рдЫ, рдЬрдм 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-Killer рдХрд╕рд░реА рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрдиреЗ

рд▓рд┐рдирдХреНрд╕рдорд╛, рддрдкрд╛рдИрдВрд▓реЗ 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

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдорд╛рди реж рдорд╛ рд╕реЗрдЯ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рдЬрдм рдореЗрдореЛрд░реА рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫ, рддреНрдпрд╣рд╛рдБ рдХрд░реНрдиреЗрд▓ рдкреНрдпрд╛рдирд┐рдХ рд╣реБрдиреЗрдЫреИрдиред

$ echo 0 > /proc/sys/vm/panic_on_oom

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдорд╛рди 1 рдорд╛ рд╕реЗрдЯ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рдЬрдм рдореЗрдореЛрд░реА рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫ, рдХрд░реНрдиреЗрд▓ рдкреНрдпрд╛рдирд┐рдХ рд╣реБрдиреЗрдЫред

echo 1 > /proc/sys/vm/panic_on_oom

OOM-Killer рд▓рд╛рдИ рдЕрди рд░ рдЕрдл рдорд╛рддреНрд░ рдЧрд░реНрди рд╕рдХрд┐рджреИрдиред рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рднрдиреЗрдХрд╛ рдЫреМрдВ рдХрд┐ рд▓рд┐рдирдХреНрд╕рд▓реЗ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдЖрд╡рдВрдЯрд┐рдд рдирдЧрд░реАрдХрди рдЙрдкрд▓рдмреНрдз рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдердк рдореЗрдореЛрд░реА рдЖрд░рдХреНрд╖рд┐рдд рдЧрд░реНрди рд╕рдХреНрдЫ, рд░ рдпреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдиреНрддреНрд░рд┐рдд рд╣реБрдиреНрдЫред рдЪрд░ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рдЫ vm.overcommit_memory.

рддрдкрд╛рдИрдВ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рдореНрди рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

0: рдХрд░реНрдиреЗрд▓ рдЖрдлреИрд▓реЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрджрдЫ рдХрд┐ рдзреЗрд░реИ рдореЗрдореЛрд░реА рдЖрд░рдХреНрд╖рд┐рдд рдЧрд░реНрдиреЗ рдХрд┐ рдЫреИрдиред рдпреЛ Linux рдХреЛ рдзреЗрд░реИ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдорд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛред
1: рдХрд░реНрдиреЗрд▓рд▓реЗ рд╕рдзреИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдЖрд░рдХреНрд╖рд┐рдд рдЧрд░реНрдиреЗрдЫред рдпреЛ рдЬреЛрдЦрд┐рдордкреВрд░реНрдг рдЫ, рдХрд┐рдирднрдиреЗ рдореЗрдореЛрд░реА рд╕рдорд╛рдкреНрдд рд╣реБрди рд╕рдХреНрдЫ, рдХрд┐рдирднрдиреЗ, рдкреНрд░рд╛рдпрдГ рд╕рдореНрднрд╡рддрдГ, рдПрдХ рджрд┐рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫред
2: рдХрд░реНрдиреЗрд▓рд▓реЗ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рднрдиреНрджрд╛ рдмрдвреА рдореЗрдореЛрд░реА рдЖрд░рдХреНрд╖рд┐рдд рдЧрд░реНрджреИрди overcommit_ratio.

рдпреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд╕рд╛рде, рддрдкрд╛рдИрдВрд▓реЗ рдореЗрдореЛрд░реАрдХреЛ рдкреНрд░рддрд┐рд╢рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рдЬреБрди рдЕрддрд┐-рдЖрд░рдХреНрд╖рд┐рдд рд╣реБрди рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ рдЫред рдпрджрд┐ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдиреИ рдард╛рдЙрдБ рдЫреИрди рднрдиреЗ, рдХреБрдиреИ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫреИрди, рд░ рдЖрд░рдХреНрд╖рдг рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЧрд░рд┐рдиреЗрдЫред рдпреЛ PostgreSQL рдХреЛ рд▓рд╛рдЧрд┐ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реЛред OOM-Killer рдЕрд░реНрдХреЛ рддрддреНрд╡рджреНрд╡рд╛рд░рд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реБрдиреНрдЫ - рд╕реНрд╡реИрдкрд┐рдЩ рдХреНрд╖рдорддрд╛, рдЬреБрди рдЪрд░рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдиреНрддреНрд░рд┐рдд рд╣реБрдиреНрдЫред cat /proc/sys/vm/swappinessред рдпреА рдорд╛рдирд╣рд░реВрд▓реЗ рдХрд░реНрдиреЗрд▓рд▓рд╛рдИ рдХрд╕рд░реА рдкреЗрдЬрд┐рдЩ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдмрддрд╛рдЙрдБрдЫрдиреНред рдореВрд▓реНрдп рдЬрддрд┐ рдЙрдЪреНрдЪ рд╣реБрдиреНрдЫ, OOM рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рдЧрд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рддреНрдпрддрд┐ рдиреИ рдХрдо рд╣реБрдиреНрдЫ, рддрд░ I/O рд╕рдЮреНрдЪрд╛рд▓рдирдХрд╛ рдХрд╛рд░рдг рдпрд╕рд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫред рд░ рдпрд╕рдХреЛ рд╡рд┐рдкрд░рд┐рдд - рдореВрд▓реНрдп рдЬрддрд┐ рдХрдо рд╣реБрдиреНрдЫ, OOM-Killer рд╣рд╕реНрддрдХреНрд╖реЗрдкрдХреЛ рдЙрдЪреНрдЪ рд╕рдореНрднрд╛рд╡рдирд╛ рд╣реБрдиреНрдЫ, рддрд░ рдбрд╛рдЯрд╛рдмреЗрд╕ рдкреНрд░рджрд░реНрд╢рди рдкрдирд┐ рдЙрдЪреНрдЪ рд╣реБрдиреНрдЫред рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рди ремреж рд╣реЛ, рддрд░ рдпрджрд┐ рд╕рдореНрдкреВрд░реНрдг рдбрд╛рдЯрд╛рдмреЗрд╕ рдореЗрдореЛрд░реАрдорд╛ рдлрд┐рдЯ рд╣реБрдиреНрдЫ рднрдиреЗ, рдорд╛рди рез рдорд╛ рд╕реЗрдЯ рдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫред

рдкрд░рд┐рдгрд╛рдорд╣рд░реВ

OOM-Killer рдорд╛ "рд╣рддреНрдпрд╛рд░рд╛" рд▓рд╛рдИ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдбрд░рд╛рдЙрди рдирджрд┐рдиреБрд╣реЛрд╕реНред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рддреНрдпрд╛рд░рд╛ рддрдкрд╛рдИрдВрдХреЛ рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдЙрджреНрдзрд╛рд░рдХрд░реНрддрд╛ рд╣реБрдиреЗрдЫред рдпрд╕рд▓реЗ рд╕рдмреИрднрдиреНрджрд╛ рдЦрд░рд╛рдм рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрд▓рд╛рдИ "рдорд╛рд░реНрдЫ" рд░ рдкреНрд░рдгрд╛рд▓реАрд▓рд╛рдИ рдХреНрд░реНрдпрд╛рд╕ рд╣реБрдирдмрд╛рдЯ рдмрдЪрд╛рдЙрдБрдЫред PostgreSQL рд╕рдорд╛рдкреНрдд рдЧрд░реНрди OOM-Killer рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдмрд╛рдЯ рдмрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН vm.overcommit_memory рдорд╛рди 2. рдпрд╕рд▓реЗ OOM-Killer рд▓реЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдЧрд░реНрдиреБ рдкрд░реНрджреИрди рднрдиреНрдиреЗ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рдЧрд░реНрджреИрди, рддрд░ рдпрд╕рд▓реЗ PostgreSQL рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рд╕рдорд╛рдкреНрдд рдЧрд░реНрди рдмрд╛рдзреНрдп рдкрд╛рд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛рд▓рд╛рдИ рдХрдо рдЧрд░реНрдиреЗрдЫред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди