前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Node.js 监控

Node.js 监控

作者头像
凌虚
发布2020-07-17 11:46:16
1.6K0
发布2020-07-17 11:46:16
举报

应用程序没有监控,就如同运行在一个黑盒子里一样,我们既不知道它现在的状况,也难免会担心它在未来某个时刻挂掉。本文将会介绍 Node.js 监控的相关内容。

01

监控指标

监控最终一定是落实到一个个具体指标上的,我们需要重点关注哪些指标,这些指标背后又意味着什么呢?

1、CPU Usage

通常情况下,Node.js 消耗的 CPU 资源是很小的,它使用异步非阻塞 IO ,然而 event loop 运行在主线程中,主线程也是可以被阻塞的(比如执行大量 CPU 密集型任务),这会导致 CPU 的使用率及负载过高。(在程序上应该尽量避免 CPU 密集型任务,或者将它们分发到 worker 中去执行)

监控指标:

  • CPU Usage
  • CPU Load

2、Memory Usage and Leaks

在理解内存的使用和泄漏之前,你需要先了解 heap 和 stack 是什么:stack 用来存储函数及其上下文;heap 则是一个更大的区域,用来存储动态分配的 everything 。单个进程可以拥有的最大 heap 是 1.5 GB ,内存泄漏的问题不容忽视,即使 node.js 所基于的 V8 引擎拥有垃圾回收( Garbage Collection )机制。内存泄漏很容易观察到。

监控指标:

  • Released memory between Garbage Collection Cycles
  • Process Heap Size
  • Process Heap Usage

3、Garbage Collection

Garbage collection 有两种类型:一种是 incremental garbage collection cycles 增量垃圾回收周期一次只处理 heap 中的一部分,快速高效;另一种是 full garbage collection cycles 全量垃圾回收周期,这种方式会暂停程序的执行,因此执行频率很低。

通过测量增量或全量垃圾回收周期的执行频率,我们可以看到它们回收内存所需的时间以及释放的内存大小,将释放的内存与 heap 大小进行比较,观察是否存在增长趋势。

监控指标:

  • Time consumed for garbage collection
  • Counters for full garbage collection cycles
  • Counters for incremental garbage collection cycles
  • Released memory after garbage collection

4、Event Loop

Event loop 很特别,它将任务以异步的方式分发到主线程之外去执行,而它本身则需要处理这些事件的响应,也就是异步的回调函数。事件驱动很高效,但是可能会出现 event loop lag(事件驱动滞后),常见的原因是 long-running synchronous processes 和 incremental increase in tasks per loop 。

Long-running synchronous processe : 请注意在应用程序中处理同步执行的方式,毕竟其他操作都需要进行等待。Node.js 著名的规则就是 “Don't block the event loop”,正如上文所述,你可以使用 forks 或者子进程。

Incremental increase in tasks per loop : 事件循环的负载和任务数可能会增加,而 node.js 需要跟踪这些事件循环需要处理的所有异步函数,这可能会导致事件循环的滞后。当然不用过于担心,使用集群模式可以很好的解决这个问题。

监控指标:

  • Slowest Event Handling ( Max Latency )
  • Fastest Event Handling ( Min Latency )
  • Average Event Loop Latency

5、Cluster-Mode and Forking Worker Processes

集群模式和 worker 进程也是现在用的比较多的地方,同样需要进行关注。

监控指标:

  • Worker count
  • Event loop latency per worker

6、Request/Response Latency

我们的服务最终都是处理请求和响应,监控自然必不可少。

监控指标:

  • Response time
  • Request rate
  • Error rates
  • Request/Response content size

02

开源监控工具

介绍几个开源的监控工具,开箱即用。

1、Prometheus

https://prometheus.io

普罗米修斯,开源的社区驱动的大名鼎鼎的工具,它可是和 Kubernetes 一样,都是从 Cloud Native Computing Foundation(云原生计算基金会)毕业的项目。这个工具是跨语言的。

2、PM2

https://github.com/Unitech/pm2

大家应该用得挺多。

3、Appmetrics

https://github.com/RuntimeTools/appmetrics-dash

4、Clinic.js

https://github.com/nearform/node-clinic

5、Express Status Monitor

https://github.com/RafalWilinski/express-status-monitor

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Node Python Go全栈开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Prometheus 监控服务
Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档