ITPub博客

首页 > 数据库 > 数据库开发技术 > Node.js 监控

Node.js 监控

原创 数据库开发技术 作者:凌虚 时间:2019-07-06 00:33:49 0 删除 编辑


应用程序没有监控,就如同运行在一个黑盒子里一样,我们既不知道它现在的状况,也难免会担心它在未来某个时刻挂掉。本文将会介绍 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





原文作者:系统架构师Go;如有侵权,请联系管理员删除。

下一篇: 从 Node.js 到 Go
请登录后发表评论 登录
全部评论

注册时间:2017-03-30

  • 博文量
    154
  • 访问量
    63688