Node.js | JavaScript堆内存不足,但堆容量只有1GB

Node.js | JavaScript堆内存不足,但堆容量只有1GB,node.js,heap-memory,Node.js,Heap Memory,我得到这个错误: FATAL ERROR: invalid table size Allocation failed - JavaScript heap out of memory 但是我使用的是——max old space size=12288,我有16GB的内存 使用process.memoryUsage(); 此外,错误总是发生在同一行代码上,即types.js:~94,这是我正在使用的库的一部分 这让我觉得某个地方有一个bug,可能在我传递给函数的参数中,但我不知道如何发现它 我应该

我得到这个错误:

FATAL ERROR: invalid table size Allocation failed - JavaScript heap out of memory
但是我使用的是
——max old space size=12288
,我有16GB的内存

使用
process.memoryUsage()
; 此外,错误总是发生在同一行代码上,即
types.js:~94
,这是我正在使用的库的一部分

这让我觉得某个地方有一个bug,可能在我传递给函数的参数中,但我不知道如何发现它

我应该找什么


完全错误是:

    <--- Last few GCs --->

[28425:0x2739620]   406975 ms: Scavenge 3689.5 (3833.4) -> 3673.7 (3833.9) MB, 4.2 / 0.0 ms  (average mu = 0.991, current mu = 0.990) allocation failure 
[28425:0x2739620]   407874 ms: Scavenge 3728.8 (3873.4) -> 3713.1 (3873.9) MB, 4.5 / 0.0 ms  (average mu = 0.991, current mu = 0.990) allocation failure 
[28425:0x2739620]   408785 ms: Scavenge 3768.1 (3913.4) -> 3752.4 (3913.9) MB, 4.5 / 0.0 ms  (average mu = 0.991, current mu = 0.990) allocation failure 


<--- JS stacktrace --->

==== JS stack trace =========================================

    0: ExitFrame [pc: 0x2a42914841bd]
Security context: 0x281401b9e6c9 <JSObject>
    1: decode [0x1c8f15ad00a9] [/media/Data/dev/btc-crawler/node_modules/bitcoin-protocol/src/types.js:~94] [pc=0x2a429178f88b](this=0x1c8f15acb299 <Object map = 0x736c200e801>,buffer=0xeeb6cf17c29 <Uint8Array map = 0x3d1fa97d04e9>,offset=4,end=0x25b4eaf822e1 <undefined>)
    2: _transform [0x38503cda5d21] [/me...

FATAL ERROR: invalid table size Allocation failed - JavaScript heap out of memory
 1: 0x89c2f0 node::Abort() [node]
 2: 0x89c33c  [node]
 3: 0xa8f05e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
 4: 0xa8f278 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
 5: 0xe7cad2  [node]
 6: 0xf88847 v8::internal::HashTable<v8::internal::StringTable, v8::internal::StringTableShape>::New(v8::internal::Isolate*, int, v8::internal::PretenureFlag, v8::internal::MinimumCapacity) [node]
 7: 0xf9a3c8 v8::internal::HashTable<v8::internal::StringTable, v8::internal::StringTableShape>::EnsureCapacity(v8::internal::Handle<v8::internal::StringTable>, int, v8::internal::PretenureFlag) [node]
 8: 0xf9a58a v8::internal::StringTable::LookupKey(v8::internal::Isolate*, v8::internal::StringTableKey*) [node]
 9: 0xfa03f4 v8::internal::StringTable::LookupString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>) [node]
10: 0xf678aa v8::internal::LookupIterator::PropertyOrElement(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, bool*, v8::internal::LookupIterator::Configuration) [node]
11: 0x1112512 in the code, v8::internal::Runtime::GetObjectProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, bool*) [node]
12: 0x1112849  [node]
13: 0x1114f09 v8::internal::Runtime_KeyedGetProperty(int, v8::internal::Object**, v8::internal::Isolate*) [node]
14: 0x2a42914841bd 

[28425:0x2739620]406975毫秒:清除3689.5(3833.4)->3673.7(3833.9)MB,4.2/0.0毫秒(平均mu=0.991,当前mu=0.990)分配失败
[28425:0x2739620]407874毫秒:清除3728.8(3873.4)->3713.1(3873.9)MB,4.5/0.0毫秒(平均mu=0.991,当前mu=0.990)分配失败
[28425:0x2739620]408785毫秒:清除3768.1(3913.4)->3752.4(3913.9)MB,4.5/0.0毫秒(平均mu=0.991,当前mu=0.990)分配失败
==JS堆栈跟踪=========================================
0:ExitFrame[pc:0x2a42914841bd]
安全上下文:0x281401b9e6c9
1:解码[0x1c8f15ad00a9][/media/Data/dev/btc crawler/node_modules/bitcoin protocol/src/types.js:~94][pc=0x2a429178f88b](this=0x1c8f15acb299,buffer=0xeeb6cf17c29,offset=4,end=0x25b4eaf822e1)
2:_变换[0x38503cda5d21][/me。。。
致命错误:无效的表大小分配失败-JavaScript堆内存不足
1:0x89c2f0节点::中止()[节点]
2:0x89c33c[节点]
3:0xa8f05e v8::Utils::ReportOOMFailure(v8::internal::Isolate*,char const*,bool)[节点]
4:0xa8f278 v8::internal::v8::FatalProcessOutOfMemory(v8::internal::Isolate*,char const*,bool)[节点]
5:0xe7cad2[节点]
6:0xf88847 v8::internal::HashTable::New(v8::internal::Isolate*,int,v8::internal::PreforeFlag,v8::internal::MinimumCapacity)[节点]
7:0xf9a3c8 v8::internal::HashTable::EnsureCapacity(v8::internal::Handle,int,v8::internal::PreforeFlag)[节点]
8:0xf9a58a v8::internal::StringTable::LookupKey(v8::internal::Isolate*,v8::internal::StringTableKey*)[节点]
9:0xfa03f4 v8::internal::StringTable::LookupString(v8::internal::Isolate*,v8::internal::Handle)[节点]
10:0xf678aa v8::internal::LookupIterator::PropertyOrElement(v8::internal::Isolate*,v8::internal::Handle,v8::internal::Handle,bool*,v8::internal::LookupIterator::Configuration)[节点]
代码中的11:0x1112512,v8::internal::Runtime::GetObjectProperty(v8::internal::Isolate*,v8::internal::Handle,v8::internal::Handle,bool*)[节点]
12:0x1112849[节点]
13:0x1114f09 v8::internal::Runtime_KeyedGetProperty(int,v8::internal::Object**,v8::internal::Isolate*)[节点]
14:0x2a42914841bd
types.js的第94行是decode函数的入口点,定义如下:

  var buffer12 = struct.Buffer(12)

  function decode (buffer, offset, end) {
    var bvalue = buffer12.decode(buffer, offset, end)
    for (var stop = 0; bvalue[stop] !== 0; ++stop);
    for (var i = stop; i < bvalue.length; ++i) {
      if (bvalue[i] !== 0) throw new Error('Found a non-null byte after the first null byte in a null-padded string')
    }
    return bvalue.slice(0, stop).toString('ascii')
  }
var buffer12=struct.Buffer(12)
功能解码(缓冲区、偏移、结束){
var bvalue=buffer12.解码(缓冲区、偏移量、结束)
对于(var stop=0;bvalue[stop]!==0;++stop);
对于(变量i=停止;i
你的打字错误

正确的用法是
节点--max old space size=4096 somescript.js

4096在这种情况下是4gb,在您的情况下相应调整它

运行
节点--v8选项
查看所有有效v8选项的列表,
或者检查一下,输入错误就在描述中(我已经更正了)。否则它根本不会运行…(它会产生一个“坏选项”错误)这个
require('v8')的输出是什么。getHeapStatistics().total_available_size
require('v8')。getHeapStatistics().total_available_size
在执行过程中在“12000000000”和“1300000000”之间变化这很奇怪…这意味着限制已增加到几乎13gb,但仍然导致堆内存不足是的…我看不出问题出在哪里。我在另一台计算机上进行了尝试,但情况相同,因此我猜问题出在哪里在代码中…另请参见: