nodejs内存监控1-监控方案
本文是《nodejs内存监控》监控系列的第一篇文章,主要是讲述nodejs主要监控的指标以及市面上一些主流的监控方案。(本文非原创,搬了一些文章的知识点只作为笔记使用)
介绍
Node.js 在前端的地位越发重要,在前端的另一面后面也逐渐展露手脚。但是,仅仅一些 Demo 只能覆盖企业级应用的部分场景,服务在生产环境的稳定运行依靠的是完善的监控、日志、流程等基础设施。
当使用 Node 在生产环境作为服务器语言时,并发量过大或者代码问题造成 OOM (out of memory) 或者 CPU 满载这些都是服务器中常见的问题,此时通过监控 CPU 及内存,再结合日志及 Release 就很容易发现问题。
关键指标
Node.js 监控的指标衡量的服务的负载、处理能力、健康状态,下面来介绍一下性能指标的定义。
内存
用于判断在服务器中的占用情况,是否存在内存泄露问题。内存的基本指标可以通过 process.memoryUsage()
方法来获取。
- rss 进程驻留内存:Resident Set Size 实际使用物理内存(包含共享库占用的内存)。
- external 外部内存:V8 管理的,绑定到 Javascript 的 C++ 对象的内存使用情况
- heapTotal V8 申请到的堆内存总大小
- heapUsed V8 的堆内存使用大小
堆空间分布情况
- new space used,新生代空间的内存使用大小
- old space used,老生代空间的内存使用大小
- map space used,隐藏类空间的内存使用大小
- code space used,代码空间的内存使用大小
- large object space used,大对象空间的内存使用大小
http
- Apdex 性能指数
- QPS
- 响应时间
- 状态码 & 错误率
- 字节大小(吞吐量)
CPU
- 使用率
- 负载(1、5、15)分钟的平均负载(系统还是进程?)
GC 统计
- gcTime:GC发生的时间,精度可能需要提高到ms级别,而不是second级别
- gcType:GC类型,一般来说新生代的scavenge回收可以忽略,这个类型GC的量级及可优化性都比较低
- gcPause:GC中断时长,需要按不同GC类型进行分类收集,老生代的markSweepCompact数据最为关键
- sizeBefore:GC前内存大小 bytes
- sizeAfter:GC后内存大小 bytes
- holesBefore:GC前内存空洞大小 bytes
- holesAfter:GC后内存空洞大小 bytes
- allocated:GC间,内存分配量 bytes
- promoted:GC间,对象晋升量 bytes
- allocationThroughput:GC间,新生代内存申请速率 bytes/ms
- promotionRatio:当前GC中内存从新生代晋升到老生代的百分比 %
- incrementalWalltime:增量标记时长 ms
- compactionSpeed:内存Compacting速率 bytes/ms
事件循环延迟
进程存活时长
- 进程生命周期,运行时长。
- 进程重启次数
开源方案
swagger-stats
支持监控 koa 与 express 框架的服务,指标展示看板很人性化,也支持 Prometheus。
egg-prometheus
egg.js 监控插件,采集指标少,仅 http 与 rpc 性能指标,适合二次开发。
Pandora.js
阿里开源 Node.js 监控工具,在 egg.js 上使用过一段时间,但服务不够稳定。
nest-status-monitor
适用于nest.js
简单的监控服务。
Sandbox
阿里 Node.js 应用程序监视,Docker Compose 的 Sandbox 部署配置。不过看起来好久没人维护应该是kpi项目烂尾了
PM2
通用 Node.js 进程守护工具,附带监控指标。监控指标需要加钱,而且不支持本地部署。对于数据敏感的可以直接pass掉。
Express Status Monitor
Express 框架的监控插件。
prom-client
Prometheus 的 Node.js 客户端,可以创建指标类型,用于生成标准的 metrics。搭配prometheus十分强大,当然也可以脱离prometheus只用来采集数据。
node-prometheus-gc-stats
基于 prom-client 的,用于采集 GC 信息。
appmetrics
node.js 应用指标,支持 prometheus,另外 appmetrics-dash
提供看板功能。
appmetrics-prometheus-client
收集指标集并将其公开 metrics,以便 Prometheus 服务器抓取。
easy-monitor
轻量级实时 Node.js 内核性能监控分析工具。纯开源项目,如果要求不高还是十分推荐上这个开源项目。
alinode
开源方案中的第一选择!,支持本地部署而且也是免费试用功能强大,中小公司的第一选择。不过严格上属于半开源,监控数据会上传到阿里云的后台进行清洗处理,对于数据比较敏感的可能没办法试用。
sematext
国外一家提供监控基础设施的服务商。
博主当前node监控方案
因为我自建了k8s集群,并且把绝大部分项目都迁移到了k8s上,所有自然而然的选择了prometheus + granafa + prom-cilent
的开源方案来实现node项目的监控。
在prometheus的基础上,使用了开源的nodeJs dashboard
。在这个基础上额外加上了http数据的相关监控。
在接下来的第二篇中,我将会大致的基于prometheus + granafa + prom-cilent
展示如何监控nodejs项目。