node.js 堆内存和已用堆大小 [pm2]

node.js heap memory and used heap size [pm2]

我目前 运行 node.js 使用 pm2。

最近,我能够使用 pm2 monit 命令检查“自定义指标”。

此处显示堆大小、已用堆大小和活动请求等信息。

我不知道堆大小是如何确定的。实际上,我在不同的服务器上检查了 pm2 运行。

每个都设置为 95mib / 55mib,因此,使用的堆大小不同。

另外,堆使用率是不是越接近100%越好?

在“Whosebug”上搜索相关资料时,看到了以下文章。

What does Heap Usage mean in PM2

另外,活跃请求是什么意思?它连续为零。

谢谢!


[编辑]

环境:ubuntu18.04 [ec2-t3.micro]

节点版本:v10.15

[额外]

服务器内存:1GB [已使用 40~50%]

cpu:vCPU (2) [已使用 1~2%]

堆是您要求 PM2 管理和监控的程序使用的 RAM。在 Javascript 和类似的语言运行时中,堆 space 在您的程序创建对象时分配,并在垃圾收集时释放。您的运行时会在需要时向您的 OS 请求更多堆 space:当活动分配超过空闲 space 时。所以你的堆大小可能会随着你的程序启动而增长。这很正常。

大多数程序在工作时会分配和释放大量对象,因此您不应尝试优化堆的使用百分比。当您的程序 运行 处于稳定状态时——也就是说,在它启动之后——您会发现 % 利用率逐渐上升,直到垃圾收集发生,然后回落。例如,nodejs/express 网络服务器为每个传入请求分配 reqres 对象,然后使用它们,然后丢弃它们以便垃圾收集器可以回收它们的 RAM。

如果您分配的堆大小在几分钟或几小时内持续增长,您可能有 内存泄漏。这是一个编程错误:您应该尽力解决的问题.您应该查看它如何适用于您的应用程序语言。除此之外,不要太担心堆的使用。

活动请求计数通过各种异步对象(如文件编写器和 TCP 连接)完成的工作。除非您的程序非常繁忙,否则它会保持在接近零的水平。

如果您的程序进行计算,请留意循环延迟。如果它爬起来,一些计算函数正在占用 Javascript。