"EMFILE, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓реЗрдВ" рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди

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

рддреЛ, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд╡ рдлрдВрдХреНрд╢рди рдХреНрдпрд╛ рдерд╛:
log: function (filename, text) { //     filename  now() + text var s = utils.digitime() + ' ' + text + '\n'; // utils.digitime() -   -      .. :: fs.open(LOG_PATH + filename, "a", 0x1a4, function (error, file_handle) { if (!error) { fs.write(file_handle, s, null, 'utf8', function (err) { if (err) { console.log(ERR_UTILS_FILE_WRITE + filename + ' ' + err); } fs.close(file_handle, function () { callback(); }); }); } else { console.log(ERR_UTILS_FILE_OPEN + filename + ' ' + error); callback(); } }); } 

рдареАрдХ рд╣реИ, рдпрд╣реА рд╣реИ, рд╕рдм рдХреБрдЫ рд╕реАрдзреЗ "рдорд╛рдереЗ рдкрд░" рд╣реИ - рдЦреБрд▓рд╛, рдиреАрдЪреЗ рд▓рд┐рдЦреЗрдВ, рдЕрдЧрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ, рддреЛ рд╣рдо рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЕрдХреНрд╕рд░ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рд▓рд┐рдирдХреНрд╕ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рдЕрдкреНрд░рд┐рдп рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде kern.maxfiles рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк

рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрд╕рд┐рдВрдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЪреБрдирд╛, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдореИрдВ рдЬреАрд╡рди рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рд▓реЙрдЧ рдлрд╝рдВрдХреНрд╢рди рд╣реА рдореЙрдбреНрдпреВрд▓ рдХреЗ "рдирд┐рдЬреА" рджрд╛рдпрд░реЗ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ __log рдФрд░ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЕрдм рдЗрд╕рдореЗрдВ рдПрдХ рдХреЙрд▓рдЧрд░реНрд▓ рд╣реИ:
 __log = function (filename, text) { return function (callback) { var s = utils.digitime() + ' ' + text + '\n'; fs.open(LOG_PATH + filename, "a", 0x1a4, function (error, file_handle) { if (!error) { fs.write(file_handle, s, null, 'utf8', function (err) { if (err) { console.log(ERR_UTILS_FILE_WRITE + filename + ' ' + err); } fs.close(file_handle, function () { callback(); }); }); } else { console.log(ERR_UTILS_FILE_OPEN + filename + ' ' + error); callback(); } }); }; }; 


рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд: рдирд┐рдЬреА рдореЗрдВ рд╣рдо __writeQueue рдЪрд░ рдмрдирд╛рддреЗ рд╣реИрдВ:
  __writeQueue = async.queue(function (task, callback) { task(callback); }, MAX_OPEN_FILES); 


рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрд╛рдЧ рдореЗрдВ, рд▓реЙрдЧ рдЕрдм рдХрд╛рдлреА рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ:
  log: function (filename, text) { __writeQueue.push(__log(filename, text)); }, 

рдХреНрдпрд╛ рд╡рд╣ рд╕рдм рд╣реИ ?!

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдЕрднреА рднреА рдЗрд╕ f-ju рдХреЛ рдХреБрдЫ рдХрд╣рддреЗ рд╣реИрдВ
 function errorNotFound (req, res) { utils.log(LOG_404, '' + req.method + '\t' + req.url + '\t(' + (accepts) + ')\t requested from ' + utils.getClientAddress(req)); .. 

рдФрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред

рддрдВрддреНрд░ рд╕рд░рд▓ рд╣реИ: рд╣рдордиреЗ MAX_OPEN_FILES рдХреЛ рдПрдХ рдЙрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдЦреБрд▓реЗ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреА рдЕрдзрд┐рдХрддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрдо рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 256)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрдм рддрдХ рдЬрдм рддрдХ рдХрд┐ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реАрдорд╛ рддрдХ рди рдкрд╣реБрдВрдЪ рдЬрд╛рдПред рд╕рднреА рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрддрд╛рд░ рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд┐рдЫрд▓реЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдпрд╛рдж рд░рдЦреЗрдВ, рд╣рдордиреЗ рдХреЙрд▓рдмреИрдХ рдЬреЛрдбрд╝рд╛; рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП!)ред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╛ - рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ - рдПрдХ рдирд┐рд╡рд╛рд░рдХ рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рд╕реМрднрд╛рдЧреНрдп рд╣реИред

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


All Articles