며칠 동안 나는 오류에 대한 해결책을 찾았습니다.
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);
불행히도 여전히 같은 오류가 발생합니다. 이 코드에 어떤 문제가 있습니까?
마지막 질문 (자바 스크립트 및 노드에 익숙하지 않음), 나는 약 5000 명의 일일 사용자에 대한 많은 요청으로 웹 응용 프로그램을 개발하는 과정에 있습니다. 파이썬과 자바와 같은 다른 언어로 프로그래밍하는 데 수년간의 경험이 있습니다. 원래 django 또는 play 프레임 워크로이 애플리케이션을 개발하려고 생각했습니다. 그런 다음 노드를 발견했고 비 차단 I / O 모델이라는 아이디어는 정말 훌륭하고 매혹적이며 무엇보다도 매우 빠릅니다.
그러나 노드에 어떤 종류의 문제가 있습니까? 프로덕션에서 입증 된 웹 서버입니까? 당신의 경험은 무엇입니까?