nodejs内存监控1-监控方案

nodejs内存监控1-监控方案

本文是《nodejs内存监控》监控系列的第一篇文章,主要是讲述nodejs主要监控的指标以及市面上一些主流的监控方案。(本文非原创,搬了一些文章的知识点只做为笔记使用)前端

介绍

Node.js 在前端的地位愈加重要,在前端的另外一面后面也逐渐展露手脚。可是,仅仅一些 Demo 只能覆盖企业级应用的部分场景,服务在生产环境的稳定运行依靠的是完善的监控、日志、流程等基础设施。node

当使用 Node 在生产环境做为服务器语言时,并发量过大或者代码问题形成 OOM (out of memory) 或者 CPU 满载这些都是服务器中常见的问题,此时经过监控 CPU 及内存,再结合日志及 Release 就很容易发现问题。express

关键指标

Node.js 监控的指标衡量的服务的负载、处理能力、健康状态,下面来介绍一下性能指标的定义。服务器

内存

用于判断在服务器中的占用状况,是否存在内存泄露问题。内存的基本指标能够经过 process.memoryUsage() 方法来获取。markdown

  1. rss 进程驻留内存:Resident Set Size 实际使用物理内存(包含共享库占用的内存)。
  2. external 外部内存:V8 管理的,绑定到 Javascript 的 C++ 对象的内存使用状况
  3. heapTotal V8 申请到的堆内存总大小
  4. heapUsed V8 的堆内存使用大小

堆空间分布状况并发

  1. new space used,新生代空间的内存使用大小
  2. old space used,老生代空间的内存使用大小
  3. map space used,隐藏类空间的内存使用大小
  4. code space used,代码空间的内存使用大小
  5. large object space used,大对象空间的内存使用大小

http

  1. Apdex 性能指数
  2. QPS
  3. 响应时间
  4. 状态码 & 错误率
  5. 字节大小(吞吐量)

CPU

  1. 使用率
  2. 负载(一、五、15)分钟的平均负载(系统仍是进程?)

GC 统计

  1. gcTime:GC发生的时间,精度可能须要提升到ms级别,而不是second级别
  2. gcType:GC类型,通常来讲新生代的scavenge回收能够忽略,这个类型GC的量级及可优化性都比较低
  3. gcPause:GC中断时长,须要按不一样GC类型进行分类收集,老生代的markSweepCompact数据最为关键
  4. sizeBefore:GC前内存大小 bytes
  5. sizeAfter:GC后内存大小 bytes
  6. holesBefore:GC前内存空洞大小 bytes
  7. holesAfter:GC后内存空洞大小 bytes
  8. allocated:GC间,内存分配量 bytes
  9. promoted:GC间,对象晋升量 bytes
  10. allocationThroughput:GC间,新生代内存申请速率 bytes/ms
  11. promotionRatio:当前GC中内存重新生代晋升到老生代的百分比 %
  12. incrementalWalltime:增量标记时长 ms
  13. compactionSpeed:内存Compacting速率 bytes/ms

事件循环延迟

进程存活时长

  1. 进程生命周期,运行时长。
  2. 进程重启次数

开源方案

swagger-stats

支持监控 koa 与 express 框架的服务,指标展现看板很人性化,也支持 Prometheus。app

egg-prometheus

egg.js 监控插件,采集指标少,仅 http 与 rpc 性能指标,适合二次开发。框架

Pandora.js

阿里开源 Node.js 监控工具,在 egg.js 上使用过一段时间,但服务不够稳定。koa

nest-status-monitor

适用于nest.js简单的监控服务。ide

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数据的相关监控。

alt

在接下来的第二篇中,我将会大体的基于prometheus + granafa + prom-cilent展现如何监控nodejs项目。

nodejs内存监控2-prometheus+grafana监控实现

相关文章
相关标签/搜索