Tag: 内存泄漏

Node.jsnetworking套接字内存泄漏?

我有这个脚本 。 var net = require("net") , heapdump = require("heapdump"); function onConnection (client) { client.on("data", function (data) { client.end(); }); }; function onListen () { var socket = net.connect({host: "127.0.0.1", port: 3000}); socket.bigBuffer = new Buffer(50000000); //50MB Buffer heapdump.writeSnapshot(__dirname + "/initial.heapsnapshot", function writeInitialSnapshot () { console.log("Wrote initial heap snapshot"); socket.write("data"); }); socket.on("close", function () { […]

这是否意味着node.js中的内存泄漏?

我使用node.js 0.10.18(在Amazon EC2上)作为我们的ios游戏http服务器。 我使用process.memoryUsage()来打印内存使用情况。 我发现我们的节点的内存使用情况是不正常的。 运行两天后: machine1节点: 2014-10-13T02:35:04.782Z – 重要:进程:堆总计119.70 MB heap使用84.62 MB的RSS 441.57 MB的 machine2节点: 2014-10-13T02:36:01.057Z – 重要:进程:堆总计744.72 MB heap使用108.19 MB的RSS 1045.53 MB 结果是: 这两个heapUsage都非常小,它与节点进程运行多长时间无关。 machine2上的heapTotal比heapUsed ,在重新启动过程之前,它永远不会变小。 但machine1 heapTotal看起来很正常。 machine1是Amazon EC2 m3.xlarge, machine2是Amazon EC2 m3.medium。 从Amazon CloudWatch中我知道machine2的性能不足,有时machine2的CPU使用率会达到100%。 那么exceptionheapTotal使用情况是否与硬件的不足有关? 100%的CPU使用率不是我们节点进程的结果,因为使用node-usage模块,我看到我们节点进程的CPU使用率永远不会高于50%。 我认为这个用法是被邻近的虚拟机盗取的(你知道在Amazon EC2上有共享的CPU时间)。 我知道缓冲区内存使用情况= (rss – heapTotal) 。 我发现两台机器上的缓冲区内存使用量会逐渐增加。 你看,两天运行两次缓冲存储器的用量都超过了300MB。 我的问题是: 为什么heapTotal即使heapUsed非常小也不会释放heapTotal使用情况? 是节点本身的问题,还是我自己的代码的一些错误? 是解决它升级硬件的唯一方法吗? 为什么缓冲区使用量逐渐增加? 这是否意味着有内存泄漏? […]

在mac os x上的有线内存增加nodejs迭代

当试图做一个未知的迭代次数的循环,我注意到我的mac上的有线存储器只是不断增加。 我有以下代码 var Iteration = function () { this.counter = 0; }; Iteration.prototype.go = function () { global.gc(); var util = require('util'); console.log('%s, %s', ++this.counter, util.inspect(process.memoryUsage())); var self = this; var largeArray = new Array(1e4); var l = largeArray.length; for(var i = 0; i<l; i++) { largeArray[i] = new Array(l); for(var j = 0; j […]

在本地服务器上复制heroku / node.js内存泄露以进行debugging

如何在本地复制Heroku的内存问题进行debugging? 或更好的configuration文件内存使用Heroku? 我在Heroku上有一个Node.js应用程序。 一个服务器端实用程序做了一堆工作来生成用于用户项目的下载文件。 对于一个特别大的情况,Heroku经过一些练习后会产生以下警告: Process running mem=529M(103.4%) 2015-01-24T02:23:18.240108+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2015-01-24T02:23:18.240108+00:00 heroku[web.1]: Process running mem=529M(103.4%) … 在每次额外的锻炼之后,记忆的使用会增加,所以在我看来就像一个确定的泄漏: 2015-01-24T02:31:22.321689+00:00 heroku[web.1]: Process running mem=747M(145.9%) 2015-01-24T02:31:22.321689+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2015-01-24T02:31:44.523511+00:00 heroku[web.1]: Process running mem=747M(145.9%) 2015-01-24T02:31:44.523800+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2015-01-24T02:32:06.296071+00:00 heroku[web.1]: Process running mem=747M(145.9%) 2015-01-24T02:32:06.296314+00:00 heroku[web.1]: Error R14 […]

在linux上运行时检测到内存泄漏:

我尝试使用事件发射器来增加听众的数量。 但它不工作。 在窗口中没有警告的情况下运行。 (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. 跟踪 at EventEmitter.addListener (events.js:160:15) at Server.connect (/dir/node_modules/mongoose/node_modules/mongodb/lib/server.js:291:17) at Db.open (/dir/node_modules/mongoose/node_modules/mongodb/lib/db.js:190:19) at MongoStore._open_database (/dir/node_modules/connect-mongo/lib/connect-mongo.js:182:15) at MongoStore._get_collection (/dir/node_modules/connect-mongo/lib/connect-mongo.js:177:14) at /dir/node_modules/connect-mongo/lib/connect-mongo.js:194:16 at /dir/node_modules/mongoose/node_modules/mongodb/lib/db.js:200:5 at connectHandler (/dir/node_modules/mongoose/node_modules/mongodb/lib/server.js:272:7) at g (events.js:180:16) at EventEmitter.emit (events.js:95:17)

Node.jsstream中的内存泄漏

我在express.js应用程序中发现了一个奇怪的内存使用增加,经过大量的调查,我发现问题是在使用可写入stream写入文件时造成的。 要隔离问题,我创build了这个简单的应用程序: var express = require('express'); var http = require('http'); var path = require('path'); var fs = require('fs'); var app = express(); app.set('port', process.env.PORT || 3000); var writable = fs.createWriteStream('/tmp/stream', {flags: 'a'}); var i = 1; app.get('/', function (req, res) { i = i + 1; writable.write(i + '\n'); res.end(); }); app.get('/flush', function (req, res) […]

Node.js内存错误致命错误:无效的数组长度分配失败 – 进程内存不足

我使用风帆0.10.5运行sails.js实例。 我在内存中存储了一些对象。 我经常遇到以下错误: 致命错误:无效数组长度分配失败 – 进程内存不足。 似乎有人遇到这个,并报告说这是在node.js v0.11.15中引入的 。 据我所知,这仍然是一个悬而未决的问题。 为了避免这种情况,我安装了节点v0.11.14并运行了v0.10.5。 但是,这个问题依然存在。 有人能告诉我,当这个错误发生在节点,并指出我如何能避免它的方向?

Node.js + Socket.io:连接断开时泄漏内存

背后故事的位: 我的Node应用程序,名为Sleepychat(在生产中,在Heroku上托pipe)最近开始报告内存限制达到的错误(在512MB)。 幸运的是,Heroku允许这个,直到达到5次才会崩溃应用程序,所以这很好。 不过,我觉得奇怪的是,这只是在最近推向Heroku之后才发生的,只不过是增加一个页面而已。 我的理论是,Heroku可能在更新上使用了更新版本的Node,但似乎并非如此。 我降级,错误仍然发生。 我的来源可以在GitHub上find 。 185行是连接代码,1553行是断开连接代码。 现在,我有一些时间来运行使用New Relic和Node Inspector的代码来分析它,并且似乎任何连接,无论是允许的,还是立即拒绝和断开连接,都会分配less量的内存断开。 例如,我导航到本地主机,页面连接到文档准备就绪,New Relic显示内存略有增加。 通常大约500kb(这对我来说仍然很大,但我猜这主要是套接字对象)。 当我断开连接时,New Relic没有发生变化。 更有趣的是,我可以垃圾网页刷新,以迅速激增内存使用量。 早些时候我提到连接是否被拒绝并不重要。 通过这个,我的意思是在15秒内互相连接3次后,网站会立即拒绝新的连接并断开连接。 尽pipe如此,页面刷新(自动连接)增加了RAM。 我已经看了很多次,看看我是不是发布了一些东西,但据我所知,一切都应该由范围来pipe理,所以我不知道是什么东西在泄漏。 不过,我注意到一些奇怪的行为,一旦我添加了New Relic。 首先,一旦Sleepychat达到了512MB的极限,Heroku会报告一个内存限制达到的错误,但是New Relic会显示好像一个大块(〜100MB)已经释放。 尽pipe如此,Heroku稍后还会报告更高的使用率。 其次,每当我使用节点检查器logging堆分配时,New Relic报告内存使用量的下降,但是一旦我停止logging就会立即恢复。 这是来自Node Inspector的一个快照文件(实际上是一个分配时间表)。 当我启动垃圾邮件页面刷新10秒。 另外,这里是New Relic报道的图片。 快照: 快照文件 新的遗物: 我不知道发生了什么事。 有人有主意吗?

Mongoosestream&setInterval导致内存泄漏?

我正试图在我的节点应用程序中诊断内存泄漏问题。 我对V8中的GC非常困惑,我不知道如何防止节点内存泄漏。 我有下面的代码,在setInterval中使用mongoose查询stream 。 setInterval(function() { var stream = Book .find({}) .stream(); stream.on('data', function(book) { // … book.updated_at = new Date(); book.save(); // … }); stream.on('error', function(err) { }); stream.on('close', function() { }); }, 1000); 这个setInterval的事件处理程序是否会导致内存泄漏?

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 ),任何猜测?