【问题标题】:node.js heap memory and used heap size [pm2]node.js 堆内存和使用的堆大小 [pm2]
【发布时间】:2020-10-08 06:25:33
【问题描述】:

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

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

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

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

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

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

在“StackOverflow”上搜索相关信息时,我看到了以下文章。

What does Heap Usage mean in PM2

还有什么意思是主动请求?连续为零。

谢谢!


[编辑]

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

节点版本:v10.15

[附加]

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

cpu : vCPU (2) [ 1~2% used ]

【问题讨论】:

    标签: node.js heap-memory pm2


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-23
      • 1970-01-01
      • 2011-12-15
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      相关资源
      最近更新 更多