Tag: 垃圾收集

如何防止在javascript中的内存泄漏

我陷入内存泄漏在JS问题。 使用Javascript: var index = 0; function leak() { console.log(index); index++; setTimeout(leak, 0); } leak(); 这里是我的testing代码,我使用instruments.app来检测它的内存使用情况,并且内存的上升速度非常快。 我怀疑似乎没有变数占据记忆。 为什么? 任何想法都很感激。

使用虚拟机执行不可信代码时NodeJS内存泄漏

我正在使用NodeJS VM模块安全地运行不受信任的代码。 我注意到一个巨大的内存泄漏,每次执行需要大约10M的内存,并没有释放它。 最终,我的节点进程最终使用了500M以上的内存。 经过一番挖掘,我将问题追溯到不断创build的虚拟机。 为了testing我的理论,我注释了创build虚拟机的代码。 果然,内存使用量急剧下降。 然后,我再次取消注释代码,并将global.gc()调用放在问题区域周围,并使用 – expose-gc标志运行节点。 这大大减less了我的内存使用,并保留了function。 在完成使用之后,有没有更好的清理虚拟机的方法? 我的下一个方法是caching包含给定的不安全代码的虚拟机,如果我再次看到不安全的代码,则重用它(背景:我让用户为文本块编写自己的parsing函数,因此不安全的代码会频繁执行或执行一次,从来没有见过)。 一些参考代码。 async.each(items,function(i,cb){ // Initialize context… var context = vm.createContext(init); // Execute untrusted code var captured = vm.runInContext(parse, context); // This dramatically improves the usage, but isn't // part of the standard API // global.gc(); // Return Result via a callback cb(null,captured); });

debugging节点js垃圾收集/内存问题与铬

我试图find一些内存泄漏的根本问题,我有一个节点的应用程序(V 0.8.6)。 为了帮助解决这个问题,我使用https://github.com/c4milo/node-webkit-agent 。 由于应用程序很大,我在一个testing平台中隔离了这个问题,以限制大型应用程序中的噪声量。 我们运行testing,然后将Chrome代理程序附加到该进程。 该物体似乎应该被清理,因为没有任何保持path缠绕在任何根物体上。 我的理解是如何保留path有缺陷,有什么我失踪? 我已经上传了一个debugging会话的下面的屏幕截图,显示了我认为应该GC'd的对象以及保留path,这些path并不会返回到任何GC根对象。

Node.js的垃圾收集器

我从这个线程学习了node.js的垃圾回收 ,node.js使用分代GC。 我经常使用循环对象引用(这两个我删除/确保最终超出范围),并想知道node.js是否处理好。 所以例如。 如果它使用ref完成。 计数,会有一个问题,所以我想知道在这个节点是多么好。 一些使用场景: 对于每个http请求,我都会创build一个带有lambda的setTimeout,这个lambda可能具有对作用域对象的引用。 范围对象也有对超时对象的引用等等。 对于每一个用户会话,我有一个指针 (仍然在做C编程)引用的http请求对象,它也有会话对象的引用,等等…请求对象经常被删除,但会话对象不是。 编辑:我问,因为这个链接,我在网上findhttp://lifecs.likai.org/2010/02/how-generational-garbage-collector.html

这个function可以被垃圾收集吗?

考虑一下这个蛋糕…嗯,代码: 'use strict' function doWork () { return new Promise(function (resolve, reject) { // work work work… // Done! But… where's the resolve() ??? }) } doWork().then(function doMoreWork () { // Some more work to do… }) 一旦Promise的构造函数中的函数完成… Promise对象是垃圾回收对象吗? doMoreWork()垃圾回收的吗? 我的猜测是doMoreWork()不能直接进行GC编辑,因为Promise保留了对它的引用,但是一旦promise的主体完成并将执行上下文返回到上层(?)作用域,栈就会展开(因为没有更多声明在这里执行),Promise变得无法访问,因此被垃圾收集。 你能证实我对这个话题的理解是正确的吗? 我怎么能凭经验观察这种行为? 换句话说,我该如何监控哪些对象正在进行GC编辑以及何时? 我纯粹在Node.js中开发,如果这有什么区别的话。

时间为node.js垃圾收集

最近,我已经安装了https://github.com/lloyd/node-memwatch进行开发,以调查GC如何与我的程序进行交互。 我已经把“stat”这个事件绑定了,arthor声明这个事件是在GC执行时触发的。 我发现,当脚本高负载。 “stat”事件不会被触发。 我不确定这是否意味着GC没有执行,但这是一个GC可能没有触发的迹象。 在我的生产服务器上,整个一天的负载甚至更高。 我很确定GC没有机会表演。 内存使用量没有减less的机会。 这就像内存泄漏。 我的观察是否正确? GC持续高负荷时不能执行吗? 如果是这样,我应该使用暴露的GC接口强制GC? GC阻塞? 我是否应该更频繁地执行GC,以便GC不会长时间阻塞每个GC? 我知道手工GC是不是一个好主意(有人反对node.js手动GC的想法,但我找不到链接的参考),但我看到内存使用量不断增加。 这确实需要解决。

垃圾收集器在Node.js中

根据谷歌,V8采用了“停止世界,世代,准确,垃圾收集器”高效的垃圾收集。 声明的一部分是V8在执行垃圾回收循环时停止程序执行。 一个显而易见的问题是,如何在暂停程序执行时拥有高效的GC? 我试图find更多关于这个话题的信息,因为我有兴趣知道当你每秒发送几十个请求并触发你的node.js服务器时,GC如何影响响​​应时间。 任何专家的帮助,个人经验或链接将不胜感激 谢谢

nodejs v8内存gc分配失败

我试图用一个什么都不做的服务器来configurationnodejs v8内存。 我使用节点memwatch来获取堆差异。 在连接和连接closures之前,我收集堆信息。 我用节点memwatch。 我尝试从客户端200并发连接。 这是连接撕下后的gc轨迹。 谁能帮我理解: 为什么记忆力在​​增加? 在连接断开之后,服务器绝对没有任何作用。 它不应该总是下降,因为垃圾收集? 2.这些分配失败是什么? 我如何真正解释这里的痕迹? 15802 ms: Mark-sweep 8.9 (45.0) -> 8.1 (45.0) MB, 58 ms [allocation failure] [GC in old space forced by flags]. 16144 ms: Mark-sweep 9.2 (45.0) -> 8.4 (45.0) MB, 53 ms [allocation failure] [GC in old space forced by flags]. 16495 ms: […]

Node.js和碎片

背景 :我来自微软的世界,在这个世界里,我曾经把网站存储在IIS上。 经验教会我每天回收我的应用程序池一次,以消除由于碎片造成的奇怪问题。 回收应用程序池基本上意味着重新启动您的应用程序,而无需重新启动整个IIS。 我还观看了一个演讲,解释了微软如何在.Net 4.5中减less了很多碎片。 现在,我正在将Node.js应用程序部署到生产环境中,并且必须确保它始终完美地工作。 我原本以为使我的应用程序每天重新启动一次。 然后我做了一些研究,以便在Node.js中find关于碎片问题的一些线索。 我发现的唯一的东西是V8中描述GC的文章中的一小段 : 为了确保快速的对象分配,短暂的垃圾收集暂停,“无内存碎片V8”采用了世界末日,准确的垃圾收集器。 这个声明对我来说真的不足以让我放弃构build我的应用程序的重启机制,但另一方面,如果没有问题,我不想做一些工作。 所以我的问题是: 我应该或不应该重新启动我的应用程序,以防止碎片?

当我手动执行垃圾收集器时,如何知道它何时完成?

我正在使用NodeJS 6.3.0编写一个Web服务器应用程序。 该应用程序使用–expose-gc参数执行,所以我有global.gc()函数可用。 问题是如何知道垃圾收集器的手动执行何时完成。 是global.gc()一个同步函数,这意味着下一行代码将在函数完成任务时执行? 可以以某种方式监视垃圾收集器的具体执行情况吗? 谢谢!