Hôm nay tôi đã chạy tập lệnh của mình để lập chỉ mục hệ thống tập tin để làm mới chỉ mục tập tin RAID và sau 4h, nó bị lỗi với lỗi sau:
[md5:] 241613/241627 97.5%
[md5:] 241614/241627 97.5%
[md5:] 241625/241627 98.1%
Creating missing list... (79570 files missing)
Creating new files list... (241627 new files)
<--- Last few GCs --->
11629672 ms: Mark-sweep 1174.6 (1426.5) -> 1172.4 (1418.3) MB, 659.9 / 0 ms [allocation failure] [GC in old space requested].
11630371 ms: Mark-sweep 1172.4 (1418.3) -> 1172.4 (1411.3) MB, 698.9 / 0 ms [allocation failure] [GC in old space requested].
11631105 ms: Mark-sweep 1172.4 (1411.3) -> 1172.4 (1389.3) MB, 733.5 / 0 ms [last resort gc].
11631778 ms: Mark-sweep 1172.4 (1389.3) -> 1172.4 (1368.3) MB, 673.6 / 0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 0x3d1d329c9e59 <JS Object>
1: SparseJoinWithSeparatorJS(aka SparseJoinWithSeparatorJS) [native array.js:~84] [pc=0x3629ef689ad0] (this=0x3d1d32904189 <undefined>,w=0x2b690ce91071 <JS Array[241627]>,L=241627,M=0x3d1d329b4a11 <JS Function ConvertToString (SharedFunctionInfo 0x3d1d3294ef79)>,N=0x7c953bf4d49 <String[4]\: ,\n >)
2: Join(aka Join) [native array.js:143] [pc=0x3629ef616696] (this=0x3d1d32904189 <undefin...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
1: node::Abort() [/usr/bin/node]
2: 0xe2c5fc [/usr/bin/node]
3: v8::Utils::ReportApiFailure(char const*, char const*) [/usr/bin/node]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/usr/bin/node]
5: v8::internal::Factory::NewRawTwoByteString(int, v8::internal::PretenureFlag) [/usr/bin/node]
6: v8::internal::Runtime_SparseJoinWithSeparator(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/bin/node]
7: 0x3629ef50961b
Máy chủ được trang bị RAM 16gb và trao đổi SSD 24gb. Tôi rất nghi ngờ kịch bản của tôi vượt quá 36gb bộ nhớ. Ít nhất là không nên
Script tạo chỉ mục các tệp được lưu trữ dưới dạng Mảng đối tượng với siêu dữ liệu tệp (ngày sửa đổi, quyền, v.v., không có dữ liệu lớn)
Đây là mã tập lệnh đầy đủ: http://pastebin.com/mjaD76c3
Tôi đã từng gặp phải các vấn đề về nút lạ trong quá khứ với kịch bản này, điều khiến tôi bị ép buộc. phân chia chỉ mục thành nhiều tệp khi nút bị trục trặc khi làm việc trên các tệp lớn như Chuỗi. Có cách nào để cải thiện việc quản lý bộ nhớ của nodejs với các bộ dữ liệu khổng lồ không?