Theo tài liệu lớp đệm Bộ đệm Node.js Bộ đệm được cấp phát bên ngoài vùng hốc V8.Kích thước tối đa của bộ đệm Node.js là gì
http://nodejs.org/docs/latest/api/buffers.html
dữ liệu thô được lưu trữ trong trường hợp của lớp đệm. Bộ đệm là tương tự như một mảng các số nguyên nhưng tương ứng với bộ nhớ thô phân bổ bên ngoài vùng hốc V8. Không thể thay đổi kích thước bộ đệm.
Tôi cần đọc một tệp lớn (lớn hơn 1GB) và cố gắng sử dụng fd.readPath() nhưng có lỗi nghiêm trọng từ V8 vì tệp lớn hơn 1 GB.
FATAL ERROR: v8::Object::SetIndexedPropertiesToExternalArrayData() length exceeds max acceptable value
Tài liệu này do Google cung cấp. http://code.google.com/p/v8/issues/detail?id=847
Tôi figured tôi muốn sử dụng một bộ đệm và tôi đang chạy một phiên bản 64 bit của nút 0.6.7 để heap của tôi sẽ có thể xử lý các tập tin lớn.
$ file `which node`
/usr/local/bin/node: Mach-O 64-bit executable x86_64
$
Tuy nhiên nếu tôi cố gắng phân bổ bộ đệm 1 GB, tôi sẽ gặp lỗi nghiêm trọng tương tự trên V8.
var oneGigInBytes = 1073741824;
var my1GBuffer = new Buffer(oneGigInBytes); //Crash
//var mySmallerBuffer = new Buffer(oneGigInBytes-1); //Works
console.log("done");
Nếu một đệm được phân bổ bên ngoài đống V8 tôi figured tôi muốn có thể phân bổ một kích thước bộ đệm lớn hơn giới hạn 1GB nhưng mã trên in lỗi chính xác giống như readPath(). Nhận xét ra thể hiện my1GBuffer và uncommenting mySmallerBuffer hoạt động để nó xuất hiện 1GB là giới hạn.
Kích thước tối đa của cá thể lớp đệm Node.js là gì? Có giới hạn ở 1GB không? Cách giải quyết hiện tại của tôi là sử dụng luồng đọc và fs.pipe().
var fs = require('fs');
process.chdir("/Users/joel/Desktop/testFiles/");
var stream = fs.createReadStream('./test1GB_File', { bufferSize: 64 * 1024 });
stream.pipe(response);
Tôi nghĩ rằng trong trường hợp các tệp lớn, nó đang sử dụng lại cùng một cá thể bộ đệm. Vì vậy, nó có một số kích thước cố định mà giữ được đầy dữ liệu khi bạn đọc nó. Đó là một bộ đệm. –
Bây giờ tôi tò mò về cách giải quyết. – jcolebrand
Bạn có cần 1GB dữ liệu trong bộ nhớ cùng một lúc không? Tại sao không phát trực tuyến tệp như bạn hiện đang đủ tốt? – fent