Деякі дні я шукав робоче рішення помилки
Error: EMFILE, too many open files
Здається, у багатьох людей однакова проблема. Звичайна відповідь передбачає збільшення кількості дескрипторів файлів. Отже, я спробував це:
sysctl -w kern.maxfiles=20480
,
Значення за замовчуванням - 10240. Це трохи дивно на моїх очах, тому що кількість файлів, якими я обробляюсь в каталозі, є нижче 10240. Навіть незнайомі, я все одно отримую ту саму помилку після збільшення кількості дескрипторів файлів .
Друге питання:
Після кількох пошуків я знайшов вирішення проблеми "занадто багато відкритих файлів":
var requestBatches = {};
function batchingReadFile(filename, callback) {
// First check to see if there is already a batch
if (requestBatches.hasOwnProperty(filename)) {
requestBatches[filename].push(callback);
return;
}
// Otherwise start a new one and make a real request
var batch = requestBatches[filename] = [callback];
FS.readFile(filename, onRealRead);
// Flush out the batch on complete
function onRealRead() {
delete requestBatches[filename];
for (var i = 0, l = batch.length; i < l; i++) {
batch[i].apply(null, arguments);
}
}
}
function printFile(file){
console.log(file);
}
dir = "/Users/xaver/Downloads/xaver/xxx/xxx/"
var files = fs.readdirSync(dir);
for (i in files){
filename = dir + files[i];
console.log(filename);
batchingReadFile(filename, printFile);
На жаль, я все-таки отримую ту саму помилку. Що не так з цим кодом?
Останнє запитання (я новачок у JavaScript та вузлі), я перебуваю в процесі розробки веб-додатків з великою кількістю запитів для близько 5000 щоденних користувачів. Я маю багаторічний досвід програмування з іншими мовами, такими як python та java. тому спочатку я думав розробити цю програму за допомогою django або play Framework. Тоді я виявив вузол, і мушу сказати, що ідея про неблокуючу модель вводу / виводу є дійсно приємною, спокусливою і, швидше за все, дуже швидкою!
Але яких проблем я повинен очікувати з вузлом? Це веб-сервер, перевірений виробництвом? Які ваші переживання?