Tag: 垃圾收集

Websocket nodejs内存泄漏

我使用节点v4.2.1与socket.io(我已经testing,即使与websocket / ws得到“更好”的结果,但仍然不够)。 目前有几个打开的连接(hundreads)和内存的使用百分比是38%(我运行在AWS t2.small Ubuntu 14.04.2 LTS(GNU / Linux 3.13.0-48-generic x86_64)) 。 服务器代码很简单(仅用于testing): … declaration … io.on('connection', function(socket){ socket.send("hi"); }); 就客户端代码而言,我正在使用相应的socket.io版本。 插槽如何占用内存中的所有空间? 而且,我正在关注这个post: http://www.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/ 我用–expose-gc标志运行服务器,但似乎不工作(每30秒我强制垃圾收集器global.gc ),任何猜测?

在特定情况下完全销毁对象和空闲内存(node.js)

我正在写一个程序,可以加载一些用户模块。 我的主程序有一个在程序和用户模块之间共享的对象列表。 现在交易是可以从列表中删除/添加这些对象。 他们是dynamic的。 在我自己的程序中,我可以确保对已删除项目的所有引用都设置为空,并清除所有侦听器。 (是否正确的方式来允许垃圾回收器处理的方式?)。 问题是,用户模块可以做任何他们想要的与被删除的对象。 他们可以添加列表器,参考它等等。在这种情况下,我怎样才能释放内存? 经过很长一段时间我的程序运行和许多添加/删除这些对象,我可能导致内存泄漏… 感谢进步。

NodeJS V8没有做适当的垃圾收集

我有这个简单的http服务器 var http = require('http'); var server = http.createServer(function(request, response) { var data = []; for ( var i=0; i < 1000000; i++ ) { data.push({}); } response.end('Done'); }); server.listen(3000); 当我启动服务器时,进程使用大约8MB的内存。 当我向服务器发出请求时,内存使用量会上升到100MB以上,并且保持这种状态。 然后,我坚持F5几秒钟,垃圾邮件的一些要求和内存使用量增长超过400MB在某些点。 当所有请求都被处理时,服务器仍然使用超过100MB。 当我提出另一个请求时,内存有时会高于或接近200MB或保持大致相同。 我让服务器运行一段时间,内存不会被释放。 我试着把date = null ,结果是一样的。 然后我试着运行带有–expose-gc标志的服务器,并且在我–expose-gc这个值之后放上global.gc() ,结果会更好,但是内存仍然保持在50MB以上。

Node.js或expression自己阻止事件循环?

我有非常简单的Node.js 8.5.0 Express 4.15.5服务器与集群模块,服务静态文件。 问题在于事件循环似乎在很长一段时间内被阻塞。 我正在使用阻塞的模块,并跟踪自上次检查以来处理了多less个请求,使用超时间隔70毫秒。 很多时候,计数器只是零:有时没有请求,事件循环有时被阻塞。 日志: Execution blocked for 1056 ms [2017-09-27 16:18:06.322], 1 requests, total requestcount 115, pid 31071 Execution blocked for 358 ms [2017-09-27 16:18:12.570], 0 requests, total requestcount 123, pid 31071 Execution blocked for 1578 ms [2017-09-27 16:18:15.551], 10 requests, total requestcount 147, pid 31071 Execution blocked for 872 ms […]

nodejs内存分配失败

我正在使用解密来解密“MySql”数据。 我得到了以下问题: <—最后几次GC —> 31681 ms:标记扫描654.1(666.5) – > 492.5(509.8)MB,267.5 / 0.0 ms [分配失败] [请求的旧空间中的GC]。 31839 ms:标记扫描492.5(509.8) – > 492.2(506.8)MB,157.5 / 0.0 ms [分配失败] [请求的旧空间中的GC]。 31985ms:标记扫描492.2(506.8) – > 492.2(497.8)MB,146.2 / 0.0ms [最后手段gc]。 32122ms:标记扫描492.2(497.8) – > 492.2(497.8)MB,136.8 / 0.0ms [最后手段gc]。 <— JS stacktrace —> 这是什么和如何解决它, 提前致谢

删除node.js数组中对象的正确方法?

我已经写了一个预先删除对象的函数。 function add(variable, expireSecond){ this.list[variable] = {"expireSecond": expireSecond, "addTime": (new Date().getTime()) / 1000}; } function deleteExpiredObject(){ var currentTime = (new Date().getTime()) / 1000; for (var key in this.list) { var item = this.list[key]; if (item.expireSecond + item.addTime < currentTime){ delete this.list[key]; } } } 当我使用它时,我试图做到以下几点: add(xxx[1], 300); 但是当我调用deleteExpiredObject() ,对象过期后内存似乎不是空闲的。 是否由于xxx[1]中的对象的非零引用? 怎么解决? 有什么图书馆可以使用吗? 谢谢!

调用处理程序数据的垃圾回收

我试图提供数据给函数调用处理程序,但我无法正确地收集垃圾。 如果我注释掉包含“ tpl->SetCallHandler(callFn, external); ”的行,则调用ObjWeakCallback 。 该函数从来没有被收集,但(至lessFnWeakCallback从来没有被调用,不pipe是什么)。 请注意,静态数据不是一个选项,因为这需要准备好每个进程的多个隔离。 isolate->setData也不是一个选项。 我完全错过了什么吗? 在v8::Function存储数据的正确方法是什么? 编辑:让我重新说明这个问题,以更好地描述我的意图… 我想创build一个函数模板(因为我需要使用它作为JS端的构造函数)。 我需要一些方法来发送一个void *给它的调用处理程序,但是这个数据必须是垃圾回收。 关于我到目前为止一直在尝试的一些笔记: 使用Function::New(isolate, callHandler, External::New(isolate, data))工作,但不提供JS端构造函数的function(对于创build的对象不可能用SetInternalFieldCount) FunctionTemplate::New(isolate, callHandler, External::New(isolate, data))提供了将数据传递给调用处理程序的能力,但是从不被垃圾回收(下面的工作示例) 我尝试使用一个普通的函数,并返回一个新创build的Object ,但接下来的假设new Fn() instanceof Fn失败 #include <v8.h> #include <iostream> // made static, just to simplify the example and prevent crashes // the persistents would normally be wrapped inside a "baton" together […]

垃圾收集器何时释放“请求”对象?

var http = require('http'); function createRequest() { var options = {}; var request = http.request(options, function(response) {}); request.end(); } createRequest(); 上面是一个小的Node.js片段。 http.request的返回值是http.request的一个实例,存储在函数createRequest的本地variablesrequest 。 片段是一个更大的应用程序的一部分,可以对createRequest多次调用。 我很困惑,这些实例何时通过Node.js中收集的http.request调用垃圾返回。

节点JS:命名callback函数和垃圾收集

process.on('an event', function () { setTimeOut(function onTimeOut() { // … code }, 5000) }) 你好朋友! 我有两个问题,请告诉我。 将指定的callback函数onTimeOut存储在全局作用域并被GC跳过? 如果存储在本地范围内,每次调用该event时都会重新创build(标记为GC),对不对?

Node.js GC mark-compact

我有一个使用内存字典的应用程序的问题(通过新的构造函数(bla,fla,pla)实例化)。 只要常驻内存大小接近〜100-150 Mbs,mark-compact阶段就需要一秒多的时间。 每百个megs增加一秒钟。 行为可以通过运行以下内容来重现: node –trace_gc test-memory.js test_memory.js: var http = require('http'), Construct = function () { this.theField = Math.random(); }, storage = []; http.createServer(function (req, res) { var i = 100000; while (–i) { storage.push(new Construct()); } res.end('Lots of data generated.'); }).listen(1337, '127.0.0.1'); 然后做curl localhost:1337一段时间,看这个: Scavenge 143.5 -> 143.5 MB, 2 ms. Mark-sweep […]