오늘은 파일 시스템 인덱싱을 위해 스크립트를 실행하여 RAID 파일 인덱스를 새로 고치고 4 시간 후에 다음 오류와 함께 충돌했습니다.
[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
서버에는 16GB RAM 및 24GB SSD 스왑이 장착되어 있습니다. 스크립트가 36GB의 메모리를 초과 한 것으로 의심됩니다. 적어도 그것은해서는 안됩니다
스크립트는 파일 메타 데이터 (수정 날짜, 권한 등 빅 데이터가 없음)와 함께 객체 배열로 저장된 파일 인덱스를 생성합니다.
전체 스크립트 코드는 다음과 같습니다. http://pastebin.com/mjaD76c3
나는 이미이 스크립트를 사용하여 과거에 이상한 노드 문제를 경험했습니다. String과 같은 큰 파일을 작업 할 때 노드가 고장 나서 인덱스를 여러 파일로 분할합니다. 거대한 데이터 세트로 nodejs 메모리 관리를 개선 할 수있는 방법이 있습니까?