Node.js: рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕реНрдореГрддрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди

рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ Node.js рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдкрд╛рд░рдВрдкрд░рд┐рдХ рдореЗрдореЛрд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣рдореЗрд╢рд╛ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рд╕рд╛рдордЧреНрд░реА, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЗ рдЙрддреНрддрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИред рдпрд╣ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ Node.js рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реА рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рднреА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред



рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ Node.js рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо рдбреЙрдХрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк - --memory рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдВрдЯреЗрдирд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдРрд╕рд╛ рд╣реА рд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ Node.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, --max-old-space-size рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдЖрдкрдХреЛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЛ рдпрд╣ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рдореЗрдореЛрд░реА рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд░рд╛рд╢рд┐ рдХрдВрдЯреЗрдирд░ рд╕реНрддрд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ рд╕реЗ рдХрдо рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдЬрдм Node.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд░рд┐рдп рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдХреЗ рдЪрд░рдо рдореВрд▓реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реА рдХреА рдХреНрд╖рдорддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред рдпрд╣ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрдВрдЯреЗрдирд░ рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдм рдЖрдЗрдП рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рдбреЛрдХрд░ рдореЗрдореЛрд░реА рд▓рд┐рдорд┐рдЯ


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рд╡реЗ рдЙрддрдиреА рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рддрдирд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред docker run рдХрдорд╛рдВрдб рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рдХрдорд╛рдВрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 docker run --memory <x><y> --interactive --tty <imagename> bash 

рдХреГрдкрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:

  • x рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреА рд╕реАрдорд╛ рд╣реИ, рдЬрд┐рд╕реЗ y рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • y рдорд╛рди b (рдмрд╛рдЗрдЯреНрд╕), k (рдХрд┐рд▓реЛрдмрд╛рдЗрдЯреНрд╕), m (рдореЗрдЧрд╛рдмрд╛рдЗрдЯ), g (рдЧреАрдЧрд╛рдмрд╛рдЗрдЯреНрд╕) рд▓реЗ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 docker run --memory 1000000b --interactive --tty <imagename> bash 

рдпрд╣рд╛рдВ, рдореЗрдореЛрд░реА рд╕реАрдорд╛ 1000000 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рд╕реЗрдЯ рд╣реИред

рдХрдВрдЯреЗрдирд░ рд╕реНрддрд░ рдкрд░ рд╕реЗрдЯ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдВрдЯреЗрдирд░ рдореЗрдВ, рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 cat /sys/fs/cgroup/memory/memory.limit_in_bytes 

рдЪрд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ --max-old-space-size рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП - --max-old-space-size рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдХрдВрдЯреЗрдирд░ рд╕реНрддрд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧреАред

рдХреБрдВрдЬреА рдирд╛рдо рдореЗрдВ "рдУрд▓реНрдб-рд╕реНрдкреЗрд╕" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реА 8 рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдвреЗрд░ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ (рд╡рд╣ рд╕реНрдерд╛рди рдЬрд╣рд╛рдВ "рдкреБрд░рд╛рдиреЗ" рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд░рдЦреЗ рдЧрдП рд╣реИрдВ)ред рдпрд╣ рдХреБрдВрдЬреА, рдпрджрд┐ рдЖрдк рдЙрди рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдиреАрдЪреЗ рд╕реНрдкрд░реНрд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдзрд┐рдХрддрдо рдвреЗрд░ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред Node.js рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реНрд╡рд┐рдЪ рдкрд░ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬрдм рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ test-fatal-error.js рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ), MyRecord рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ list рд╕рд░рдгреА рдореЗрдВ 10 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реАрдк рд╡реГрджреНрдзрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИред

 'use strict'; const list = []; setInterval(()=> { const record = new MyRecord(); list.push(record); },10); function MyRecord() { var x='hii'; this.name = x.repeat(10000000); this.id = x.repeat(10000000); this.account = x.repeat(10000000); } setInterval(()=> { console.log(process.memoryUsage()) },100); 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрд┐рди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд╣рдо рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрди рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдбреЙрдХрд░ рдЫрд╡рд┐ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдбреЙрдХрд░ рд╣рдм рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 docker pull ravali1906/dockermemory 

рдЖрдк рдЗрд╕ рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЫрд╡рд┐ рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 docker run --memory 512m --interactive --tty ravali1906/dockermemory bash 

рдпрд╣рд╛рдБ ravali1906/dockermemory рдЫрд╡рд┐ рдХрд╛ рдирд╛рдо рд╣реИред

рдЕрдм рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдореГрддрд┐ рд╕реАрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрдВрдЯреЗрдирд░ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ:

 $ node --max_old_space_size=1024 test-fatal-error.js { rss: 550498304, heapTotal: 1090719744, heapUsed: 1030627104, external: 8272 } Killed 

рдпрд╣рд╛рдВ, - --max_old_space_size рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред process.memoryUsage() рд╡рд┐рдзрд┐ рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддреА рд╣реИред рдорд╛рди рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рд╕рдордп рдЖрд╡реЗрджрди рдХреЛ рдЬрдмрд░рди рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреА рд╕реАрдорд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рдХреЛ рдкрд╛рд░ рдХрд░ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдХреМрди рд╕реА рд╕реАрдорд╛ рд╣реИ? рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдкрд░ рд╣рдо рдХрд┐рди рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ - рдЕрдзрд┐рдХрддрдо-рдкреБрд░рд╛рдиреЗ-рд╕реНрдерд╛рди-рдЖрдХрд╛рд░


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Node.js (рд╕рдВрд╕реНрдХрд░рдг 11.x рддрдХ) рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдвреЗрд░ рдХрд╛ рдЖрдХрд╛рд░ 32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ 700 рдПрдордмреА рдФрд░ 64-рдмрд┐рдЯ рдкрд░ 1400 рдПрдордмреА рд╣реИред рдЖрдк рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдЖрдк рдХрдВрдЯреЗрдирд░ рдореЗрдореЛрд░реА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рд╕реАрдорд╛ --max-old-space-size рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП --max-old-space-size рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд▓рд┐рдирдХреНрд╕ OOM рдХрд┐рд▓рд░ рдХрд░реНрдиреЗрд▓ рдХрд░реНрдиреЗрд▓ рд╕реБрд░рдХреНрд╖рд╛ рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдзрд┐рдХрддрдо-рдкреБрд░рд╛рдирд╛-рд╕реНрдерд╛рди-рдЖрдХрд╛рд░ рд╣реИ


рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рд▓реЙрдиреНрдЪ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд╕рднреА рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╕реАрдорд╛ --max-old-space-size рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЧрдИ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдвреЗрд░ рдХрд╛ рдЖрдХрд╛рд░ рдЖрд╡реЗрджрди рдХреА рдЬрд░реВрд░рддреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдпрд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрд╡реЗрджрди рдХрд┐рддрдиреА рдореЗрдореЛрд░реА рд╣реИ рдЬреЛ process.memoryUsage() рд╕реЗ heapUsed рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдвреЗрд░ рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдирддреАрдЬрддрди, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХрдВрдЯреЗрдирд░ рдХреЗ рдмрдВрдж рд╣реЛрдиреЗ рдХреА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдЖрд╡реЗрджрди рдХреЛ рдЬрдмрд░рди рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЬрдм рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди Node.js рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдореЗрдореЛрд░реА рд▓рд┐рдорд┐рдЯ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдкреИрдЯрд░реНрди рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

  1. OOM рдХрд┐рд▓рд░ рдЙрд╕ рдХреНрд╖рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдмрд╛рдж рдореЗрдВ рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм heapTotal рдФрд░ heapUsed рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реЛрддреЗ рд╣реИрдВред
  2. OOM рдХрд┐рд▓рд░ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ Node.js рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛


рдПрдХ рдХрдВрдЯреЗрдирд░ рдЙрд╕ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдХреЗрддрдХ рдХреА рджреЗрдЦрд░реЗрдЦ рдХрд░рддрд╛ рд╣реИред рдпрд╣ RSS (рдирд┐рд╡рд╛рд╕реА рд╕реЗрдЯ рдЖрдХрд╛рд░) рд╣реИред рдпрд╣ рд╕рдВрдХреЗрддрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рднрд╛рдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдореЗрдореЛрд░реА рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рдЖрд░рдПрд╕рдПрд╕ рд╕рдХреНрд░рд┐рдп рдореЗрдореЛрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рд╕рднреА рдореЗрдореЛрд░реА рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ "рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА" рдЬрд░реВрд░реА рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдореЛрд░реА рдХреЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рднрд╛рдЧреЛрдВ рдХреЛ рдкреЗрдЬ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрдВрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореБрдХреНрдд рдХрд┐рдП рдЧрдП рд╕реНрдерд╛рди рдХреЛ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдореЗрдореЛрд░реА рдХреЗ рдЗрди рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡реИрдк рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред

рдЖрд░рдПрд╕рдПрд╕ рдореИрдЯреНрд░рд┐рдХ рдЕрдкрдиреЗ рдкрддреЗ рдХреЗ рд╕реНрдерд╛рди рдореЗрдВ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рдФрд░ рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЖрд╡реЗрджрди рдХреЗ рдЬрдмрд░рди рдмрдВрдж рдкрд░ рдирд┐рд░реНрдгрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕рдмреВрдд


1 рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ резред рдПрдХ рдЖрд╡реЗрджрди рдЬреЛ рдПрдХ рдмрдлрд░ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ


рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг, buffer_example.js , рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдмрдлрд░ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ:

 const buf = Buffer.alloc(+process.argv[2] * 1024 * 1024) console.log(Math.round(buf.length / (1024 * 1024))) console.log(Math.round(process.memoryUsage().rss / (1024 * 1024))) 

рдЬрдм рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдореГрддрд┐ рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдПрдВ:

 docker run --memory 1024m --interactive --tty ravali1906/dockermemory bash 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдПрдБ:

 $ node buffer_example 2000 2000 16 

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

2 рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ 2ред рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмрдлрд░ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди


рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, buffer_example_fill.js , рдореЗрдореЛрд░реА рди рдХреЗрд╡рд▓ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рд╣реИ, рдмрд▓реНрдХрд┐ рдбреЗрдЯрд╛ рд╕реЗ рднреА рднрд░реА рд╣реБрдИ рд╣реИ:

 const buf = Buffer.alloc(+process.argv[2] * 1024 * 1024,'x') console.log(Math.round(buf.length / (1024 * 1024))) console.log(Math.round(process.memoryUsage().rss / (1024 * 1024))) 

рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдПрдБ:

 docker run --memory 1024m --interactive --tty ravali1906/dockermemory bash 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдБ:

 $ node buffer_example_fill.js 2000 2000 984 

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЕрдм рднреА рдЖрд╡реЗрджрди рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ! рдХреНрдпреЛрдВ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХрдВрдЯреЗрдирд░ рдХреЛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрдм рд╕рдХреНрд░рд┐рдп рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рд╕реАрдорд╛ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдкреЗрдЬ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдорд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдореЛрд░реА рдХреЗ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рдкреЗрдЬ рдкреЗрдЬ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рд░рд┐рд▓реАрдЬрд╝ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рдХреЛ рдЙрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдбреЙрдХрд░ - --memory рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореЗрдореЛрд░реА рд▓рд┐рдорд┐рдЯ рдХреЗ рдмрд░рд╛рдмрд░ рд╕реНрд╡реИрдк рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 2 рдЬреАрдмреА рдореЗрдореЛрд░реА рд╣реИ - рд╕рдХреНрд░рд┐рдп рдореЗрдореЛрд░реА рдореЗрдВ 1 рдЬреАрдмреА рдФрд░ рдкреЗрдЬ рдлрд╛рдЗрд▓ рдореЗрдВ 1 рдЬреАрдмреАред рдпрд╣реА рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдкреГрд╖реНрда рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрд░рдПрд╕рдПрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЖрдХрд╛рд░ рдХрдВрдЯреЗрдирд░ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд╣реИред рдирддреАрдЬрддрди, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред

3 рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ 3ред рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдлрд░ рднрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреЗрдЬ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ


рдпрд╣рд╛рдВ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдпрд╣рд╛рдВ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ (рдпрд╣ рд╡рд╣реА buffer_example_fill.js рдлрд╛рдЗрд▓ рд╣реИ):

 const buf = Buffer.alloc(+process.argv[2] * 1024 * 1024,'x') console.log(Math.round(buf.length / (1024 * 1024))) console.log(Math.round(process.memoryUsage().rss / (1024 * 1024))) 

рдЗрд╕ рдмрд╛рд░, рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдПрдВ, рд╕реНрд╡реИрдк рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ:

 docker run --memory 1024m --memory-swap=1024m --memory-swappiness=0 --interactive --tty ravali1906/dockermemory bash 

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:

 $ node buffer_example_fill.js 2000 Killed 

рд╕рдВрджреЗрд╢ рджреЗрдЦреЗрдВ Killed ? рдЬрдм --memory-swap рдХреБрдВрдЬреА рдорд╛рди --memory-swap рдХреБрдВрдЬреА рдорд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрдВрдЯреЗрдирд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ --memory рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдХрд░реНрдиреЗрд▓ рдЬрд┐рд╕рдореЗрдВ рдХрдВрдЯреЗрдирд░ рд╕реНрд╡рдпрдВ рдЪрд▓рддрд╛ рд╣реИ, рдХрдВрдЯреЗрдирд░ рджреНрд╡рд╛рд░рд╛ рдкреЗрдЬ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЕрдирд╛рдо рдореЗрдореЛрд░реА рдкреЗрдЬреЛрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдХреЛ рдбрдВрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИред --memory-swappiness рдзреНрд╡рдЬ рдХреЛ 0 --memory-swappiness , рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдкреЗрдЬрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдм рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рдЬрдм RSS рдореАрдЯреНрд░рд┐рдХ рдХрдВрдЯреЗрдирд░ рдХреА рдореЗрдореЛрд░реА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ


рдЬрдм Node.js рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ --max-old-space-size рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдорд╛рди рдХрдВрдЯреЗрдирд░ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореЗрдореЛрд░реА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ Node.js рдХрдВрдЯреЗрдирд░ рд╕реАрдорд╛ рдкрд░ "рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ"ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рдпрд╣ рддрдереНрдп рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдХреЗрд╡рд▓ - рдвреЗрд░ --max-old-space-size рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреВрд░реЗ рдвреЗрд░ рдорд╛рддреНрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдХреНрдпреЛрдВ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдХреНрд░рд┐рдп рдореЗрдореЛрд░реА (RSS) рдХрдИ рдмрд╛рд╣рд░реА рдХрд╛рд░рдХреЛрдВ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрд╡рдпрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рднрд╛рд░ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдорд╛рдирддрд╛ рдХрд╛ рд╕реНрддрд░, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╢реЗрдбреНрдпреВрд▓рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпреЗ рдХрд╛рд░рдХ рд▓реЙрдиреНрдЪ рд╕реЗ рд▓реЙрдиреНрдЪ рддрдХ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдм рдЖрдк рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдВрдЯреЗрдирд░-рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ, рддреЛ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП Node.js рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛рдПрдБ


  • рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдиреНрдпреВрдирддрдо Node.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдВ рдФрд░ рд╕реНрдерд┐рд░ RSS рдЖрдХрд╛рд░ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, Node.js 10.x рдХреЗ рд▓рд┐рдП, рдпрд╣ рд▓рдЧрднрдЧ 20 рдПрдордмреА рд╣реИ) рдХреЛ рдорд╛рдкреЗрдВред
  • Node.js рдХреЗ рдвреЗрд░ рдореЗрдВ рди рдХреЗрд╡рд▓ рдкреБрд░рд╛рдиреЗ_рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп (рдЬреИрд╕реЗ рдХрд┐ new_space, code_space, рдФрд░ рдЗрд╕реА рддрд░рд╣) рднреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдордВрдЪ рдХреЗ рдорд╛рдирдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд▓рдЧрднрдЧ 20 рдПрдордмреА рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрджрд┐ рдорд╛рдирдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓ рдЧрдИ рд╣реИрдВ, рддреЛ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдЕрдм рд╣рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп (рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдпрд╣ 40 рдПрдордмреА рд╣реЛрдЧрд╛) рдХреЛ рдШрдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рд░рд╣рддрд╛ рд╣реИ рдПрдХ рдореВрд▓реНрдп рд╣реИ, рдЬреЛ рдореЗрдореЛрд░реА рд╕реЗ рдмрд╛рд╣рд░ рдЪрд▓рдиреЗ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо --max-old-space-size рдбрд░ рдХреЗ рдмрд┐рдирд╛, рдореБрдЦреНрдп рдореВрд▓реНрдп - --max-old-space-size рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЬрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рдореЗрдореЛрд░реА рд▓рд┐рдорд┐рдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛рдПрдБ, рд▓реЗрдХрд┐рди Node.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИрдВ


  • рдореЛрдб рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЦрдкрдд рдХреА рдЧрдИ рдореЗрдореЛрд░реА рдХреЗ рдЪрд░рдо рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  • рдЖрд░рдПрд╕рдПрд╕ рдХреЗ рд╕реНрдХреЛрд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдБ, process.memoryUsage() рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде, рд▓рд┐рдирдХреНрд╕ top рдХрдорд╛рдВрдб рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред
  • рдмрд╢рд░реНрддреЗ рдХрд┐ рдЬрд┐рд╕ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ, рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЛ рдХрдВрдЯреЗрдирд░ рдореЗрдореЛрд░реА рд╕реАрдорд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо 10% рддрдХ рдмрдврд╝рд╛рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред

рдкрд░рд┐рдгрд╛рдо


Node.js 12.x рдореЗрдВ, рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдвреЗрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЙрдкрд▓рдмреНрдз рд░реИрдо рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдВрдЯреЗрдирд░ рдореЗрдВ Node.js рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рддрдВрддреНрд░ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп --max_old_space_size рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдмрдиреЗ рд╣реБрдП рд╣реИрдВред рдЗрд╕рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдХреЛрдИ рдХрдВрдЯреЗрдирд░ рдореЗрдВ Node.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ рдореЗрдореЛрд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рди рдФрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдкрд░ рдорд╛рдирдХ рд╕реАрдорд╛рдУрдВ рдХрд╛ рдЬреНрдЮрд╛рди, рдЬреЛ рдмрд▓реНрдХрд┐ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реИ, рдЗрди рд╕реАрдорд╛рдУрдВ рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдмрджрд▓рдХрд░ рдЖрд╡реЗрджрди рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ Node.js рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХреНрдпрд╛ рдЖрдк рдореЗрдореЛрд░реА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрд╛рд╣рд░ рдЖ рдЧрдП рд╣реИрдВ?



Source: https://habr.com/ru/post/hi454522/


All Articles