Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js &引用;“JavaScript内存不足”;以「;“集群”;(多进程)环境_Node.js_Child Process - Fatal编程技术网

Node.js &引用;“JavaScript内存不足”;以「;“集群”;(多进程)环境

Node.js &引用;“JavaScript内存不足”;以「;“集群”;(多进程)环境,node.js,child-process,Node.js,Child Process,我正在开发一个服务器功能,该功能从数据源获取大量数据,由于获取数据的大小,我的堆内存似乎溢出 我试图在我的子进程上增加max old space size,但看起来 子进程只分配默认的空间大小,而不是给定的选项大小 这就是我如何设置的 const{THREADS,NODE_ENV}=process.ENV; cluster.schedulingPolicy=cluster.SCHED_RR; if(cluster.isMaster){ constforks=(NODE|ENV===“develo

我正在开发一个服务器功能,该功能从数据源获取大量数据,由于获取数据的大小,我的堆内存似乎溢出

我试图在我的子进程上增加
max old space size
,但看起来 子进程只分配默认的空间大小,而不是给定的选项大小

这就是我如何设置的

const{THREADS,NODE_ENV}=process.ENV;
cluster.schedulingPolicy=cluster.SCHED_RR;
if(cluster.isMaster){
constforks=(NODE|ENV===“development”)?1:Math.min(os.cpus().length,Math.max(THREADS | 4));
for(设i=0;i{
控制台日志(m);
});
worker.on(“退出”),(信号,=>{
log(`Server node dead:${signal}`);
cluster.fork(“./server/app.js”{
execArgv:['--max old space size=4096'],
env:Object.assign({“NODE_OPTIONS”:--max old space size=4096“})
});
})
}
console.log(“服务器已启动…”)
}
if(cluster.isWorker){
log(“工作节点有::”;
console.log(process.memoryUsage())
log(`每个节点的内存使用率:${Math.floor(process.memoryUsage().rss/10000000)/10}GB`);
log(v8.getHeapStatistics());
const server=新服务器({
schema:makeExecutableSchema({typeDefs,resolvers}),
数据源:()=>({
…//我的数据源
}),
上下文:({req,res})=>{
if(!req.body.query.includes(“内省查询”)){
log(`${req.method}${req.url}${req.body.query}`);
}
返回{…请求}
}
});
server.listen().then({url})=>{
//无所事事
});
}
这是从控制台得到的

Server started..
Worker node has :: 
{ rss: 129269760,
  heapTotal: 100978688,
  heapUsed: 67195888,
  external: 511759 }
Memory usage per node :: 1.2 GB
{ total_heap_size: 100978688,
  total_heap_size_executable: 3145728,
  total_physical_size: 98869008,
  total_available_size: 1439367280,
  used_heap_size: 67240920,
  heap_size_limit: 1526909922,
  malloced_memory: 16384,
  peak_malloced_memory: 3562032,
  does_zap_garbage: 0 }
这是我发送请求时得到的

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
[7501:0x102808000]    35581 ms: Mark-sweep 1395.8 (1424.9) -> 1395.4 (1424.4) MB, 934.0 / 0.0 ms  (average mu = 0.095, current mu = 0.018) allocation failure scavenge might not succeed
 1: 0x10003cf99 node::Abort() [...]
[7501:0x102808000]    36519 ms: Mark-sweep 1396.2 (1424.4) -> 1395.8 (1424.4) MB, 936.2 / 0.0 ms  (average mu = 0.051, current mu = 0.003) allocation failure scavenge might not succeed

 2: 0x10003d1a3 node::OnFatalError(char const*, char const*) [~/.nvm/versions/node/v10.16.0/bin/node]

 3: 0x1001b7835 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [~/.nvm/versions/node/v10.16.0/bin/node]
<--- JS stacktrace --->

 4: 0x100585682 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [~/.nvm/versions/node/v10.16.0/bin/node]
==== JS stack trace =========================================
 5: 0x100588155 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [~/.nvm/versions/node/v10.16.0/bin/node]

    0: ExitFrame [pc: 0x22a4085dbe3d]
Security context: 0x122e5461e6e9 <JSObject>
 6: 0x100583fff v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [~/.nvm/versions/node/v10.16.0/bin/node]
...
致命错误:堆限制附近的无效标记压缩分配失败-JavaScript堆内存不足
[7501:0x102808000]35581毫秒:标记扫描1395.8(1424.9)->1395.4(1424.4)MB,934.0/0.0毫秒(平均mu=0.095,当前mu=0.018)分配失败清除可能无法成功
1:0x10003cf99节点::中止()[…]
[7501:0x102808000]36519毫秒:标记扫描1396.2(1424.4)->1395.8(1424.4)MB,936.2/0.0毫秒(平均mu=0.051,当前mu=0.003)分配失败清除可能无法成功
2:0x10003d1a3节点::OnFatalError(字符常量*,字符常量*)[~/.nvm/versions/node/v10.16.0/bin/node]
3:0x1001b7835 v8::internal::v8::FatalProcessOutOfMemory(v8::internal::Isolate*,char const*,bool)[~/.nvm/versions/node/v10.16.0/bin/node]
4:0x100585682 v8::internal::Heap::FatalProcessOutOfMemory(char const*)[~/.nvm/versions/node/v10.16.0/bin/node]
==JS堆栈跟踪=========================================
5:0x100588155 v8::internal::Heap::CheckIneffectiveMarkCompact(无符号长,双精度)[~/.nvm/versions/node/v10.16.0/bin/node]
0:ExitFrame[pc:0x22a4085dbe3d]
安全上下文:0x122e5461e6e9
6:0x100583FFFv8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector,v8::GCCallbackFlags)[~/.nvm/versions/node/v10.16.0/bin/node]
...

官方文件说你做得很好。考虑打开一个关于No.js Github的问题。您是否尝试使用
--max old space size=4096
启动mai进程?我就是这样运行的
nodemon--exec babel node--max old space size=4096 server/app.js
奇怪的是,在我的主进程中,
process.checkUsage()
说它只有1.5GB,但如果我在我的主进程中替换tiny
max old space size=40
,它很快就会随着OOM消失。没有nodemon?官方文档说你做得很好。考虑打开一个关于No.js Github的问题。您是否尝试使用
--max old space size=4096
启动mai进程?我就是这样运行的
nodemon--exec babel node--max old space size=4096 server/app.js
奇怪的是,在我的主进程中,
process.checkUsage()
说它只有1.5GB,但如果我在主进程中替换tiny
max old space size=40
,它很快就会随着OOM而消失,而没有nodemon?