几天以来,我一直在寻找错误的可行解决方案
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和node的新手),我正在开发一个Web应用程序,该应用程序每天有大约5000个用户,并且有很多请求。我在使用其他语言(例如python和java)进行编程方面有多年的经验。所以最初我想用Django或play框架来开发此应用程序。然后我发现了节点,我必须说,非阻塞I / O模型的想法真的很好,很诱人,而且所有这些都非常快!
但是节点应该遇到什么样的问题?它是经过生产验证的Web服务器吗?你有什么经验?