返回

监控 Node 服务内存使用情况的简单方法

前端

当使用 Node.js 在生产环境中作为服务器语言时,并发量过大或者代码问题造成 OOM(out of memory)或者 CPU 满载这些都是服务器中常见的问题,此时通过监控 CPU 及内存,再结合日志及 Release 就很容易发现问题。以下是一个 Node Server 的内存监控方法,可帮助您轻松跟踪和分析内存使用情况,并及时发现潜在问题。

1. 使用 top 命令

top 命令是一个常用的系统资源监视工具,可以实时显示正在运行的进程的资源使用情况,包括内存使用量。要在终端中使用 top 命令,只需输入以下内容:

top

然后,您将看到一个类似于下图的输出:

top - 17:32:14 up 24 days, 17:38,  2 users,  load average: 0.32, 0.28, 0.23
Tasks: 336 total,   1 running, 334 sleeping,   0 stopped,   1 zombie
%Cpu(s):  5.4 us,  2.8 sy,  0.0 ni, 91.3 id,  0.5 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16377804 total,  4831280 free, 11028648 used,   497876 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
        1 root      20   0 1272420  92808   7400 S  0.0  0.6   1:09.97 systemd
        2 root      20   0       0      0      0 R  0.0  0.0   0:00.00 kthreadd
        3 root      20   0       0      0      0 S  0.0  0.0   0:00.06 ksoftirqd/0
        4 root      20   0       0      0      0 R  0.0  0.0   0:00.00 kworker/0:0H
        5 root     -20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
        6 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_sched
        7 root      rt   0  141476  16032   6040 S  0.0  0.1   0:00.03 migration/0

在输出中,您可以找到名为 "Mem" 的一行,其中包含有关内存使用情况的信息。例如,在我的机器上,总内存为 16377804 KiB,其中 4831280 KiB 是空闲的,11028648 KiB 已被使用,497876 KiB 用作缓冲区/高速缓存。

2. 使用 free 命令

free 命令是另一个用于监视内存使用情况的常用工具。它提供了有关系统中可用内存、已用内存和空闲内存的信息。要在终端中使用 free 命令,只需输入以下内容:

free

然后,您将看到一个类似于下图的输出:

             total       used       free     shared    buffers     cached
Mem:       16377804    9628900    6748904          0     497876   6235340
-/+ buffers/cache:    2895784    13481120
Swap:      2097148         0    2097148

在输出中,您可以找到名为 "Mem" 的一行,其中包含有关内存使用情况的信息。例如,在我的机器上,总内存为 16377804 KiB,其中 9628900 KiB 已被使用,6748904 KiB 是空闲的,497876 KiB 用作缓冲区,6235340 KiB 用作高速缓存。

3. 使用 ps 命令

ps 命令可以显示正在运行的进程的信息,包括它们的内存使用量。要在终端中使用 ps 命令,只需输入以下内容:

ps aux | grep node

然后,您将看到一个类似于下图的输出:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
nobody    22997  0.0  0.3  122024 29724 ?        Ss   17:32   0:00 node server.js

在输出中,您可以找到名为 "%MEM" 的一列,其中包含有关进程内存使用情况的信息。例如,在我的机器上,名为 "server.js" 的 Node.js 进程使用了 0.3% 的内存。

4. 使用 New Relic 等第三方工具

除了上述命令行工具外,您还可以使用第三方工具来监控 Node.js 服务的内存使用情况。一些流行的工具包括:

  • New Relic
  • Datadog
  • AppDynamics
  • Dynatrace

这些工具通常提供更详细的内存使用情况信息,以及其他有用的功能,例如报警和可视化。

5. 启用 Node.js 的内存泄漏检测

Node.js 内置了内存泄漏检测功能。要启用此功能,您可以在启动 Node.js 应用程序时添加 --inspect-brk 标志。例如:

node --inspect-brk server.js

然后,您可以在 Chrome DevTools 中连接到应用程序并检查内存使用情况。要连接到应用程序,请在 Chrome 中打开 chrome://inspect 页面,然后单击 "Open dedicated DevTools for Node" 按钮。

总结

本文介绍了几个简单的方法,帮助您监控 Node.js 服务的内存使用情况。通过这些方法,您可以轻松跟踪和分析内存使用情况,并及时发现潜在问题。