Tag: 内存泄漏

NodeJS:调用global.gc()不会将内存降到最低?

为了研究内存泄漏,我设置了一个在每个POST /gc触发global.gc()的路由 app.post('/gc', function(req, res){ global.gc(); }); 但是,我注意到,如果我发送这个请求,每次都会越来越减less内存使用量。 不应该调用global.gc() 一次就足以把内存global.gc() 最小 ? 如果是这样,为什么每次调用连续多次调用会减less内存 ? (我正在使用Node.js v0.12)

是否有可能摧毁一个背景?

Node.JS或V8中存在内存泄漏,这使我无法重新使用进程来对许多HTML页面进行jquery化。 错误在这里: https : //github.com/joyent/node/issues/1007 同时Bug,当我完成它时,是否有可能“摧毁”上下文? 这样的接缝可能会导致jsdom代码的简单入侵,因此我可以在不写入重新启动的情况下以合乎逻辑的方式写入自己的代码。 我们有一种方法来跟踪我们公司对开源项目的调整,以便我们能够引入更新,并且仍然修复我们可能发现的错误,而无需等待开源社区。 如果我能消灭这种语境,我想我会好起来的。 在jsdom的tmpvar说这是一个Node.JS的问题,我不知道什么时候将被修复,因为看到这是几个月前,已经有很多开放的问题https://github.com/joyent/node/issues/637 。

heroku上的node.js web服务器 – 不断增长的内存

我的应用程序启动并运行在5个平行的dynos上的heroku。 有500-1500瑞克/分钟的恒定负载,所以高达25瑞克/秒。 问题是RSS内存在不断增长。 现在我手动重新启动应用程序时,内存达到危险的水平(1 heroku dyno使用的最大内存是512MB)。 内存图表看起来像这样(灰色上限是在512mb限制): 内存释放的时候(在图表上)是当我重新启动应用程序。 奇怪的是,只有当服务器上有不断的负载时才会发生。 当服务器上存在例如2分钟的负载时,则内存增加,之后再下降。 所以看起来由于某种原因,垃圾收集器工作不正常(这是没有收集垃圾,直到服务器加载完成,应用程序不忙)。 有什么我可以做的吗? 这不是内存泄漏,我认为是因为当服务器上没有负载时释放内存… 我到目前为止所尝试的是: 以2分钟间隔手动呼叫GC 设置 – max-old-space-size = 300然而当内存命中300mb时没有任何反应 – 它仍在增加。 也许有其他的select,可以帮助? 节点版本是0.10.20 我使用节点memwatch包,我设法从应用程序收集堆差异: http://jsonfiddle.net/auf8d(11分钟,+37 MB之间的堆差异) http://jsonfiddle.net/4nvcd(15分钟,+50 MB之间的堆差异) 所以肯定会有一些泄漏。 最大的记忆从第一差异变化: … { "what": "Array", "size_bytes": 9320312, "size": "8.89 mb", "+": 79086, "-": 10215 }, … { "what": "Closure", "size_bytes": 2638224, "size": "2.52 mb", "+": […]

Node.js v8-profiler模块将不会安装

我试图在Node.js应用程序中debugging内存泄漏,但不能通过npm安装v8-profiler模块: npm install v8-profiler 响应(缩写为错误部分) – 你可以在这里看到完整的错误和更多的评论: https : //github.com/dannycoates/v8-profiler/issues/9 Build failed: -> task failed (err #1): {task: cxx snapshot.cc -> snapshot_1.o} -> task failed (err #1): {task: cxx graph_path.cc -> graph_path_1.o} -> task failed (err #1): {task: cxx graph_node.cc -> graph_node_1.o} npm ERR! error installing v8-profiler@0.0.3 我在Debian 6.0.3上使用从源代码构build的节点0.6.10。 我没有任何其他NPM模块的问题。 我也尝试在具有相同操作系统的机器上安装模块,但是使用节点0.4.12来解决相同的问题。 任何帮助在这个问题将不胜感激。

通过webkit-devtools-agentdebuggingnode.js,查看堆中对象内容的方法?

我试图通过webkit-devtools-agent( https://github.com/c4milo/node-webkit-agent )来调查我的nodejs程序中的内存泄漏问题。 通过采取堆快照,我可以看到堆大小不断增加。 但由于我的代码结构复杂。 发现代码生成这些对象似乎并不容易。 在个人资料页面中,我只能看到这样的内容: (Array) [] @28631 [] @31853 (map descriptors)[] @44687 function NativeModule() @35997 有没有办法找出这些对象的内容和生成这些对象的来源? 我读了一篇关于node.jsdebugging的文章( http://dtrace.org/blogs/bmc/2012/05/05/debugging-node-js-memory-leaks/ )。 这是相当惊人的。 但不幸的是,我认为它不在linux服务器上。 谢谢!

node.js尽pipe堆大小相当一致,但RSS内存随着时间的推移而增长

我有一个node.js应用程序,尽pipeheapUsed / heapTotal保持相对稳定,RSS内存的使用似乎仍然在增长。 下面是一个星期内(从process.memoryUsage() )获取的三次记忆测量的图表: 您可能会注意到,有一个有点循环的模式 – 这与每天的应用程序的活动相对应。 实际上在堆中似乎有轻微的增长,尽pipe远不及RSS的增长。 所以我一直在使用堆转储(使用node-heapdump),并使用Chrome的堆比较function来查找泄漏。 一个这样的比较可能看起来像以下(按大小增量按降序排列): 实际显示的内容取决于何时拍摄快照(例如,有时会分配更多的缓冲区对象等) – 在这里,我试图拿出一个最能说明问题的示例。 首先要注意的是左侧的大小(203MB vs 345MB)远远高于图中显示的堆大小。 其次,大小差异明显不符合142MB的差异。 实际上,按大小三angular形按升序sorting,多个对象被释放 ,这意味着堆应该更小! 有没有人有任何想法: 这是为什么呢? (RSS不断增长,堆大小稳定) 我怎么能阻止这种情况的发生,而不是重新启动服务器时不时? 其他详情: 节点版本:0.10.28 操作系统:Ubuntu 12.04,64位 更新:正在使用的模块列表: asynchronous v0.2.6 log4js v0.6.2 mysql v2.0.0-alpha7 nodemailer v0.4.4 节点时间 v0.9.2(对于时区信息,不要与节点时间混淆) sockjs v0.3.8 下划线 v1.4.4 用法 v0.3.9(用于CPU统计,不用于内存使用) webkit-devtools-agent v0.2.3(已加载但未激活) 堆转储时,加载heapdump v0.2.0。 谢谢阅读。

Node.JS内存泄漏与PM2

我正在运行我的服务器与pm2 start … pm2 monit在2小时后显示我3GB memory 。 于是我附上了memwatch,现在又等了2个小时,pm2 monit显示的内存又达到了3GB 。 所以,我检查了生成的日志memwatch。 给我看了: { before: { nodes: 75659, size_bytes: 11141702, size: '10.63 mb' }, after: { nodes: 73226, size_bytes: 10840598, size: '10.34 mb' }, change: { size_bytes: -301104, size: '-294.05 kb', freed_nodes: 5141, allocated_nodes: 2708, 另一个: { before: { nodes: 72591, size_bytes: 10728318, size: '10.23 mb' […]

警告:connect.session()MemoryStore不是为生产环境devise的,因为它会泄漏内存,并且不会扩展到单个进程

在这里好日子是我的代码: var express = require('express'); var session = require('express-session'); var app = express(); app.set('trust proxy', 1); app.use(session({ secret: 'secret', saveUninitialized: true, resave: false, maxAge: 1000 * 60 * 15, cookie:{ secure: true } })); 这段代码总是返回我的日志a: 警告:connect.session()MemoryStore不是为生产环境devise的,因为它会泄漏内存,并且不会扩展一个进程。 我尝试了谷歌search,但我似乎并不了解一些教程。 对不起,我的英语不好。

从未在节点js中释放使用过的内存。 很奇怪

我刚刚完成开发我的第一个node.js应用程序,现在我正在testing它在我的VPS。 观察进程“节点”资源的使用情况,我注意到当请求一个页面(特别是一些页面)时,内存使用量的增加。 特别是,如果请求的页面是一个静态页面,增加是最小的。 如果请求的页面是/ admin,增加可以是1mb! 当然,当/ admin请求时,我的服务器比静态页面服务更多。 他连接到mongodb,他执行4“查找”,他绑定结果到一个HTML模板使用绑定 。 现在有什么问题? 这个记忆使用,将永远不会被释放! 所以我认为在我的代码中有一个逻辑错误,但后来我做了另一个更有趣的testing。 考虑一下这个非常简单的nodejs服务器: var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(3000, 'my_public_ip'); 如果我试图用浏览器发出多个请求(简单地通过按住f5一分钟),内存使用增长缓慢,即使经过很长时间和closures浏览器之后,进程使用的内存也不会释放。 现在,在我的/pipe理代码中可能会出现一些错误(使用了1MB的内存,并且从未释放每个请求都非常高!),但是我认为上面的简单脚本使用的内存永远不会释放! 你怎么看待这件事? 有一种方法可以避免它? 另外,(在我的真实服务器),我用你的方式使用memwatch : var memwatch = require('memwatch'); memwatch.on('leak', function(info) { console.log(info); process.exit(1); }); 如果我用浏览器执行多个请求,大约10秒钟后,我正在做,过程将退出,这是错误的: { start: Wed Nov 26 2014 08:21:07 GMT-0500 (EST), end: […]

Node.js上的Express.js是否有内存泄漏?

我一直使用运行在一个简单的项目的Heroku服务器上的node.js快递。 当我开始使用新的文物来监视内存时,我注意到一个缓慢的内存泄漏模式。 我删除了我开发的所有代码和所有其他节点模块,只留下自己和新的文物模块。 我仍然观察到内存泄漏。 我想知道如果这是express.js内存泄漏。 这里是所有剩下的代码: require('newrelic'); var express = require('express'); var app = express(); var env = process.env.NODE_ENV || 'development'; if ('development' == env) { app.set('port', process.env.PORT || 3000); } app.get('/', function ( req, res ) { res.send('The server is up and running!'); }); app.listen(app.get('port'), function() { console.log('Express server listening on port %d in […]