Nodejs轻量级内存监控工具,弄了一个小东西

发布于 1周前 作者 songsunli 来自 nodejs/Nestjs

Nodejs轻量级内存监控工具,弄了一个小东西

Memeye

Memeye 是一个轻量级的 NodeJS 进程监控工具,它提供 进程内存、 V8 堆空间内存、操作系统内存 三大维度的数据可视化展示。 前端部分,借助 Vue2ChartJS 提供了一个不错的动态展示面板。
Memeye 在宿主进程中,只植入了一个简单的数据收集器,其他工作则启动一个子进程,交由子进程来进行。
这样做能把 Memeye 的代码对宿主进程的影响降到最低,以确保数据的真实性。

特点

  • 轻量级
  • 简单
  • 面向开发环境
  • 可视化

Note: Memeye 暂时只支持单进程, NodeJS 分布式进程还不适用,所以不建议在产品环境使用。

动机

总所周知, NodeJS 对内存是很敏感的。在去年 4 月我用 NodeJS 做的一个营销性的项目,在上线当天 PV 突破了 100W 。
其中内存就呈现出持续上涨趋势,在排查问题的过程中,想寻找一个轻量级的,只要可视化的呈现内存使用情况的工具,无果。
然后就有了这个项目的想法,但当时由于繁忙只做出了一个 Demo 级别的,简单能用就发布了。
最近有时间,再次翻出来,重构改版,增加更多维度的数据展示。

Demo

See preview demo (也许需要翻墙)

兼容性

  • Node v7.x
  • Node v6.x

安装 & 使用

运行下面命令安装 :

npm install memeye --save-dev

然后在你的代码中引入

const memeye = require('memeye');
memeye();

最后打开你的浏览器,输入下面地址:

http://localhost:23333  //23333 port by defaul.

就这么简单!

Memeye 是如何工作的

Memeye 有三个核心概念: Collector, Indicators, Dashboard 。
Collector 运行在宿主进程中(你的 NodeJS 进程), Indicator 和 Dashboard 运行在子进程中,这样可以尽量减少 Memeye 代码对你的宿主进程的影响。

Collector

Collector 会监听宿主进程,并且收集数据,然后通过 IPC 通信管道发送数据给子进程,交由子进程处理。

Indicator

Indicator 像一个状态机。当它的属性变化的时候,会触发相应事件。所以我们可以用它来处理收集回来的数据。

Dashboard

Dashboard 会以子进程的形式唤起。他会创建一个 Indicator 实例,以及启动一个集成 socket.io 的 Http 服务器。
然后绑定 Indicator 和进程通信管道,以接收父进程发过来的数据。
最后再绑定 Indicator 和 socket.io ,这样可以在 Indicator 属性变化的时候发送数据给前端。

##Collector, Indicator, Dashboard 之间的通信

commication.jpeg

预览

预览


8 回复

看起来挺不错的,最近刚好在调试 nodejs 的内存问题, devtools 真是帮了大忙,要早几天看到楼主的东西就更好啦


嘿嘿,觉得好的话,给加个星星呗,欢迎使用过程中有问题提 issue 。

本地测试了下,挺好看的,哈哈

界面部分还有很多的优化空间,也是以后有时间想改进的。😁

mark ,看着很不错哈

你好!很高兴你对Node.js轻量级内存监控工具感兴趣。确实,在Node.js应用中监控内存使用情况非常重要,可以帮助你及时发现并解决内存泄漏问题。下面是一个简单的示例,展示如何使用Node.js内置的process.memoryUsage()方法来创建一个轻量级的内存监控工具。

首先,确保你已经安装了Node.js。然后,你可以创建一个新的JavaScript文件(例如memoryMonitor.js),并添加以下代码:

const interval = 1000; // 每秒监控一次

setInterval(() => {
  const memoryUsage = process.memoryUsage();
  
  console.log(`RSS: ${memoryUsage.rss / 1024 ** 2} MB`);
  console.log(`Heap Total: ${memoryUsage.heapTotal / 1024 ** 2} MB`);
  console.log(`Heap Used: ${memoryUsage.heapUsed / 1024 ** 2} MB`);
  console.log(`External: ${memoryUsage.external / 1024 ** 2} MB`);
  console.log(`Array Buffers: ${memoryUsage.arrayBuffers / 1024 ** 2} MB`);
  console.log('------------------------');
}, interval);

这段代码会每隔一秒打印一次当前的内存使用情况,包括RSS(常驻集大小)、堆总大小、堆已使用大小、外部内存和数组缓冲区内存。

要运行这个监控工具,只需在终端中执行以下命令:

node memoryMonitor.js

这样,你就可以实时看到Node.js应用的内存使用情况了。这个工具非常轻量级,适合在生产环境中进行简单的内存监控。如果你需要更详细的内存分析,可以考虑使用更专业的工具,如Chrome DevTools或Node.js的内存分析工具(如heapdumpmemwatch-next)。

回到顶部