退出node.js process.memoryUsage()的返回值是什么?RSS是驻留集大小,进程内存中保存在RAM中的部分(通过此过程在字节中保存在RAM中的内存量)示例中使用的'text.txt'文件大小为370KB(378880字节)
var http = require('http');
var fs = require('fs');
var express = require('express');
var app = express();
console.log("On app bootstrap = ", process.memoryUsage());
app.get('/test', function(req, res) {
fs.readFile(__dirname + '/text.txt', function(err, file) {
console.log("When File is available = ", process.memoryUsage());
res.end(file);
});
setTimeout(function() {
console.log("After sending = ", process.memoryUsage());
}, 5000);
});
app.listen(8081);
Run Code Online (Sandbox Code Playgroud)
所以在应用程序bootstrap上:{ rss: 22069248, heapTotal: 15551232, heapUsed: 9169152 }
在我提出10个'/ test'请求后,情况是:
When File is available = { rss: 33087488, heapTotal: 18635008, heapUsed: 6553552 }
After sending = { rss: 33447936, heapTotal: 18635008, heapUsed: 6566856 }
Run Code Online (Sandbox Code Playgroud)
因此,从app boostrap到第10个请求,rss增加了11378688个字节,大约是文件大小的30倍text.txt.
我知道这个代码会在将结果写回客户端之前将整个data.txt文件缓存到每个请求的内存中,但我预计在完成请求后,"text.txt"的占用内存将被释放?但事实并非如此?
二,如何设置节点进程可以使用的RAM内存的最大大小?
在js中,垃圾收集器在执行代码后不会立即运行.因此,执行后不会立即释放内存.如果您关心内存消耗,可以在处理大型对象后独立运行GC.您可以在此处找到更多信息.
setTimeout(function() {
global.gc();
console.log("After sending = ", process.memoryUsage());
}, 5000);
Run Code Online (Sandbox Code Playgroud)
要查看内存分配,可以使用v8-profiler运行服务器并获取Heap快照.更多信息在这里.
| 归档时间: |
|
| 查看次数: |
3232 次 |
| 最近记录: |