监控 Node 服务内存使用情况的简单方法
2023-10-04 15:20:23
当使用 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 服务的内存使用情况。通过这些方法,您可以轻松跟踪和分析内存使用情况,并及时发现潜在问题。