рдореЗрдореЛрд░реА рдмрд╛рд╣рд┐рд░рдХреЛ рдХрд┐рд▓рд░ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ Linux PostgreSQL рдХреЛ рд▓рд╛рдЧрд┐

рдореЗрдореЛрд░реА рдмрд╛рд╣рд┐рд░рдХреЛ рдХрд┐рд▓рд░ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ Linux PostgreSQL рдХреЛ рд▓рд╛рдЧрд┐

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

╨Т 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

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

$ 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-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

DDoS рд╕реБрд░рдХреНрд╖рд╛, VPS VDS рд╕рд░реНрднрд░рд╣рд░реВ рднрдПрдХрд╛ рд╕рд╛рдЗрдЯрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рднрд░рдкрд░реНрджреЛ рд╣реЛрд╕реНрдЯрд┐рдЩ рдЦрд░рд┐рдж рдЧрд░реНрдиреБрд╣реЛрд╕реН ЁЯФе DDoS рд╕реБрд░рдХреНрд╖рд╛, VPS VDS рд╕рд░реНрднрд░рд╣рд░реВ рд╕рд╣рд┐рддрдХреЛ рднрд░рдкрд░реНрджреЛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реЛрд╕реНрдЯрд┐рдЩ рдХрд┐рдиреНрдиреБрд╣реЛрд╕реН | ProHoster