V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JerryC
V2EX  ›  Node.js

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

  •  
  •   JerryC · 2017-03-07 21:33:09 +08:00 · 938 次点击
    这是一个创建于 2855 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    预览

    预览

    7 条回复    2017-03-08 17:48:27 +08:00
    egen
        1
    egen  
       2017-03-07 23:24:03 +08:00 via iPhone
    看起来挺不错的,最近刚好在调试 nodejs 的内存问题, devtools 真是帮了大忙,要早几天看到楼主的东西就更好啦
    JerryC
        2
    JerryC  
    OP
       2017-03-08 00:55:23 +08:00
    @egen 嘿嘿,觉得好的话,给加个星星呗,欢迎使用过程中有问题提 issue 。
    egen
        3
    egen  
       2017-03-08 01:03:19 +08:00 via iPhone
    @JerryC 已 star
    JerryC
        4
    JerryC  
    OP
       2017-03-08 09:44:51 +08:00
    @egen 谢谢!
    xbdsky
        5
    xbdsky  
       2017-03-08 14:19:14 +08:00
    本地测试了下,挺好看的,哈哈
    JerryC
        6
    JerryC  
    OP
       2017-03-08 15:55:54 +08:00
    @xbdsky 界面部分还有很多的优化空间,也是以后有时间想改进的。😁
    dapeng2010
        7
    dapeng2010  
       2017-03-08 17:48:27 +08:00
    mark ,看着很不错哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1074 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:54 · PVG 06:54 · LAX 14:54 · JFK 17:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.