Birkaç gündür bir hataya çalışan bir çözüm aradım
Error: EMFILE, too many open files
Birçok insanın aynı sorunu var gibi görünüyor. Genel cevap, dosya tanımlayıcılarının sayısının artırılmasını içerir. Yani, bunu denedim:
sysctl -w kern.maxfiles=20480
,
Varsayılan değer 10240'tır. Bu, gözlerimde biraz garip, çünkü dizinde işlediğim dosya sayısı 10240'ın altında. Yabancı bile, dosya tanımlayıcılarının sayısını artırdıktan sonra aynı hatayı alıyorum. .
İkinci soru:
Birkaç aramadan sonra "çok fazla açık dosya" sorunu için bir çözüm buldum:
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);
Ne yazık ki hala aynı hatayı alıyorum. Bu kod ile ilgili yanlışlık nedir?
Son bir soru (javascript ve düğüm için yeniyim), yaklaşık 5000 günlük kullanıcı için birçok istek içeren bir web uygulaması geliştirme sürecindeyim. Python ve java gibi diğer dillerle programlama konusunda uzun yıllara dayanan deneyime sahibim. bu yüzden başlangıçta bu uygulamayı django veya oyun çerçevesi ile geliştirmeyi düşündüm. Sonra düğümü keşfettim ve engellemeyen G / Ç modeli fikrinin gerçekten güzel, baştan çıkarıcı ve en önemlisi çok hızlı olduğunu söylemeliyim!
Fakat düğüm ile ilgili ne tür problemler beklemeliyim? Üretimi kanıtlanmış bir web sunucusu mu? Deneyimleriniz neler?