Javascript 如何监控Node.js的内存使用情况?

Javascript 如何监控Node.js的内存使用情况?,javascript,node.js,memory,Javascript,Node.js,Memory,如何监视Node.js的内存使用情况?在Linux/Unix上(注意:Mac OS是Unix)使用top并按M(Shift+M)按内存使用情况对进程进行排序 在Windows上使用任务管理器。:检测并查找Node.JS代码中的内存泄漏。 检查本教程内置模块有一种方法,可以深入了解当前Node.js进程的内存使用情况。以下是64位系统上节点v0.12.2中的一个示例: $node——公开gc >process.memoryUsage();//初始使用 {rss:19853312,heapTotal

如何监视Node.js的内存使用情况?

在Linux/Unix上(注意:Mac OS是Unix)使用
top
并按M(Shift+M)按内存使用情况对进程进行排序

在Windows上使用任务管理器。

:检测并查找Node.JS代码中的内存泄漏。 检查本教程

内置模块有一种方法,可以深入了解当前Node.js进程的内存使用情况。以下是64位系统上节点v0.12.2中的一个示例:

$node——公开gc
>process.memoryUsage();//初始使用
{rss:19853312,heapTotal:9751808,heapUsed:4535648}
>gc();//强制基线的GC。
未定义
>process.memoryUsage();//基线内存使用情况。
{rss:22269952,heapTotal:11803648,heapUsed:4530208}
>变量a=新数组(1e7);//为阵列中的10m项分配内存
未定义
>process.memoryUsage();//分配了这么多项目后的内存
{rss:102535168,heapTotal:91823104,heapUsed:85246576}
>a=null;//允许对数组进行垃圾收集
无效的
>gc();//强制GC(需要节点--公开GC)
未定义
>process.memoryUsage();//GC后的内存使用
{rss:23293952,heapTotal:11803648,heapUsed:4528072}
>process.memoryUsage();//空闲后的内存使用情况
{rss:23293952,heapTotal:11803648,heapUsed:4753376}
在这个简单的例子中,您可以看到,分配一个10M元素的数组消耗了大约80MB的内存(看看
heapUsed
)。

如果您查看V8的源代码(,),那么您将看到数组使用的内存是一个固定值加上长度乘以指针的大小。后者是64位系统上的8字节,这证实了观察到的8 x 10=80MB的内存差异是有意义的。

另外,如果您想了解全局内存而不是节点进程,请:

var os = require('os');

os.freemem();
os.totalmem();

原作基本上已经死了。试试看,这在现代版本的Node上似乎运行良好。

您可以使用Node.js

const formatMemoryUsage=(data)=>`${Math.round(data/1024/1024*100)/100}MB`
常量memoryData=process.memoryUsage()
常数记忆={
rss:“${formatMemoryUsage(memoryData.rss)}->常驻集大小-为进程执行分配的总内存”,
heapTotal:`${formatMemoryUsage(memoryData.heapTotal)}->已分配堆的总大小`,
heapUsed:`${formatMemoryUsage(memoryData.heapUsed)}->执行过程中使用的实际内存`,
外部:`${formatMemoryUsage(memoryData.external)}->V8外部内存`,
}
console.log(memoryUsage)
/*
{
“rss”:“177.54 MB->常驻集大小-为进程执行分配的总内存”,
“heapTotal”:“102.3MB->分配堆的总大小”,
“heapUsed”:“94.3 MB->执行期间使用的实际内存”,
“外部”:“3.03 MB->V8外部内存”
}
*/

如果您使用的是express.js框架,那么您可以使用。它很容易集成,并以图形格式提供CPU使用率、内存使用率、响应时间等


可以提供更多细节helpful@majidarif转到
Applications>Utilities
,您将发现一个
活动监视器
应用程序。那一个相当于任务管理器。OS X也有
top
命令。在Linux上使用
htop
而不是top。现在好多了。node-memwatch似乎已经不存在了(上次更新于2013年3月)。有其他选择吗?@GoloRoden npm安装memwatch下一步工作正常。这里是回复:一个用于查找内存泄漏的更为最新的资源memwatch不再被维护,也不会在最新版本的node上工作,所以不用麻烦了。@MestreSan哪个版本的node不需要
--expose gc
函数?@MestreSan我从来没有说过你需要
--expose gc
函数
process.memoryUsage()
gc()
(要求
——expose gc
)被用于确定触发垃圾收集的答案,以便更容易查看
过程。memoryUsage
报告。这是一个以正确方式度量JS内容的极好答案。谢谢你的回答,你是上议院的人。我刚刚实现了通过调用process公开的所有方法,这将帮助我创建一个更高效的应用程序。谢谢。我相信这应该是公认的答案。但是,freemem()与服务器上的可用内存不同。有没有办法找到可用的记忆而不是免费的?国王死了;国王万岁:
node memwatch
至少适用于node版本10。谢谢,@FrankMeulenaar:+1:这两个库(memwatch-next和node-memwatch)都已弃用或无法使用。