Tag: 内存泄漏

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以上。

原生JS Promise的这种用法是否会导致Node.js中的内存泄漏?

这里是我有的代码的示例代表。 我有一个UDP接收器,它会连续收到大量的数据包。 这是股市现场数据。 这应该给一些关于数据包量的想法。 根据收到的数据,更新到一个MySQL数据库和另一个到MongoDB。 然而,这个代码泄漏内存就像任何东西,并在大约12分钟内与7.5GB内存的EC2机器上的OOM错误崩溃。 这个崩溃是非常一致的。 我读了几个关于与Promise链接或recursion调用Promise相关的内存泄漏的stackoverflow问题和github问题。 我觉得我的代码不适合这个描述,因此想知道这个代码是否也会导致内存泄漏。 当我将这整个代码改变为没有Promises和callback的时候,内存消耗接近1%。 没有泄漏。 我正在使用当前稳定版本的Node.js(v6.9.5 LTS)。 使用原生Promise,没有像Bluebird这样的库 const dgram = require('dgram'); const receiver = dgram.createSocket('udp4'); const myObject = require('./myObject.js'); receiver.on('message', function(payload, sender) { myObject.processPayload(payload); }); receiver.bind(PORT); // In mObject.js var myObject = { processPayload: function(payload) { var updateDoc = doSomethingToPayload(payload); // Mongo npm package offers APIs which return […]

nodejs的mysql内存泄漏大量的高频查询

TL; DR https://gist.github.com/anonymous/1e0faaa99b8bb4afe3749ff94e52c84f – 演示内存消耗意味着泄漏。 这是在我的代码或在MySQL包? 完整版 : 我在程序中看到很多内存泄漏(并且每隔几个小时最终会崩溃)。 该程序通过UDP套接字接收大量数据,将相关位存储在内存中的Hash中,并将数据每10秒钟一次写入Mysql DB(AWS RDS实例)。 node.js版本是6.9.4,在RHEL 7.1上运行 我试着用“–inspect”选项和Chrome devtools做一些分析,我最初的怀疑是mysql包。 为此,我做了一个简单的node.js程序,它只是对本地数据库进行了大量的查询,并发现它确实消耗了很多内存。 这里是程序: https : //gist.github.com/anonymous/1e0faaa99b8bb4afe3749ff94e52c84f 我尝试了一些程序的变化,他们都消耗内存的速度明显指向内存不足的崩溃。 变化是: 使用单个连接 使用30个连接池(这是生产设置) 使用有效的查询语句 使用导致parsing错误的无效查询语句(第27行中的string123之前的空格使其成为错误的查询。删除空格使得该查询是有效的) 这个上面的程序没有像内存中的数据库。 它只做一件事:以高频率向MySQL数据库发出大量的UPDATE查询。 我已经将频率设置为2秒来轻松演示内存消耗。 降低这个频率将减缓内存消耗,但是它将会增长。 它只会延迟崩溃,但崩溃本身是不可避免的。 频率的实际使用要求是10秒,每次运行的更新查询次数将达到10,000次。 所以示例程序中的数字非常接近真实世界的情况,不仅仅是一些假设的模拟数字。 这里是“–trace-gc”的输出,表示内存消耗在一分钟内升至400MB: [29766:0x36c5120] 52326 ms: Scavenge 324.9 (365.1) -> 314.7 (369.1) MB, 8.3 / 0.0 ms [allocation failure]. [29766:0x36c5120] 53292 ms: Scavenge […]

debugging内存泄漏nodejs

我试图debugging我的生产服务器中的内存泄漏。 我正在寻找节点分析器,但是我发现所有的解决scheme都需要v8-profiler( https://github.com/dannycoates/v8-profiler ),它似乎不适用于最新版本的节点(链接错误: https://github.com/dannycoates/v8-profiler/issues/20 )。 你能推荐其他解决scheme吗? (我意识到,这是检测nodejs内存泄漏的重复,但解决schemebuild议没有更新以及…)

node.js域内存泄漏

我在Express应用程序中为每个传入请求附加一个新域,就像在node.js文档中的示例一样。 但是,我注意到我正在泄漏记忆。 当我做一个heapdump并在Chrome中检查它时,我注意到应该立即被垃圾回收的类实际上被旧的域所保留。 有什么我该做的,以告诉node.js不要保留旧的域名?

如何在Node.JS App中find内存泄漏的来源

Node.js / Express应用程序中有内存泄漏。 该应用程序在3-5天后死于以下日志消息: FATAL ERROR: JS Allocation failed – process out of memory 我安装了一个没有用户连接的服务器,它仍然崩溃,所以我知道泄漏源于下面的代码,在后台运行同步api更改到数据库。 poll(config.refreshInterval) function poll(refreshRate) { return apiSync.syncDatabase() .then(function(){ return wait(refreshRate) }) .then(function(){ return poll(refreshRate) }) } var wait = function wait(time) { return new Promise(function(resolve){ applog.info('waiting for %s ms..', time) setTimeout(function(){ resolve(true) },time) }) } 有哪些技术可用于分析堆以查找所有内存的源对象? 这需要一段时间的崩溃,所以我会需要一些日志,我可以回来后分析。 有没有像Java的JVM标志-XX:HeapDumpOnOutOfMemoryError ?

为什么Node.js heapdump显示已编译的代码?

您好,第一次在调查Node.js应用程序中的内存泄漏。 通过阅读Chrome Profiler中的heapdump快照,我看到有一个条目(编译代码),见附件。 我以为JavaScript不是编译的,不像Java。 任何人都可以摆脱灯光? 此外,不像JProfiler和编写代码的方式(没有正式的构造函数),很难find泄漏,到目前为止快照提供的信息不是很有用,我search了一段时间,至今没有阅读这些快照太多有用的信息,有什么build议吗? 谢谢!

使用节点stream时内存不足

我正在尝试索引一个大(1 500 000行)文件并将其推送到弹性search。 为了做到这一点,我使用节点jsstream; 但是,我一直在耗尽内存。 我究竟做错了什么? var rl = null; initialize(function() { var stream = fs.createReadStream(process.argv[2]); rl = readline.createInterface({input: stream, terminal: false}); var i = 0; rl.on('line', function(line) { rl.pause(); processObject(++i, extractObject(line)); }); rl.on('close', function() { console.log('\nRefreshed index;'); process.exit(); }); }); function processObject(number, input) { client.index({ index: INDEX, type: TYPE, id: number, body: input }, […]

什么诊断工具可用于Node.js应用程序?

那里有很多工具,哪些诊断工具对于node.js应用程序的诊断性内存泄漏问题是很好的?

在生产环境中查找nodejs中的内存泄漏

我在生产中有一个nodejs应用程序,我有一个内存泄漏(内存在3天内从600Mo增加到3Go)。 我search了一些工具来进行内存转储,但是我只发现需要在应用程序中写入转储的插件。 当然,我不能停止我的应用程序,并重新启动它(修改后)以拍摄快照,我想采取一个外部工具的节点外存储转储。 你知道这样的工具吗? 谢谢。