Trong một số ngày, tôi đã tìm kiếm một giải pháp làm việc cho một lỗi
Error: EMFILE, too many open files
Có vẻ như nhiều người có cùng một vấn đề. Câu trả lời thông thường liên quan đến việc tăng số lượng mô tả tập tin. Vì vậy, tôi đã thử điều này:
sysctl -w kern.maxfiles=20480
,
Giá trị mặc định là 10240. Điều này hơi lạ trong mắt tôi, vì số lượng tệp tôi đang xử lý trong thư mục dưới 10240. Ngay cả người lạ, tôi vẫn nhận được lỗi tương tự sau khi tôi tăng số lượng mô tả tệp .
Câu hỏi thứ hai:
Sau một số tìm kiếm, tôi thấy có một vấn đề xoay quanh vấn đề "quá nhiều tệp đang mở":
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);
Thật không may, tôi vẫn nhận được lỗi tương tự. Có gì sai với mã này?
Một câu hỏi cuối cùng (tôi chưa quen với javascript và nút), tôi đang trong quá trình phát triển một ứng dụng web với rất nhiều yêu cầu cho khoảng 5000 người dùng hàng ngày. Tôi đã có nhiều năm kinh nghiệm lập trình với các ngôn ngữ khác như python và java. Vì vậy, ban đầu tôi nghĩ sẽ phát triển ứng dụng này với django hoặc play framework. Sau đó, tôi phát hiện ra nút và tôi phải nói rằng ý tưởng về mô hình I / O không chặn thực sự rất hay, quyến rũ và hầu hết đều rất nhanh!
Nhưng loại vấn đề nào tôi nên mong đợi với nút? Đây có phải là một máy chủ web đã được chứng minh? Kinh nghiệm của bạn là gì?