DingMing

丁大铭的个人空间,用来分享一些前端小技巧,默默成长吧,哈哈

Node.js Apm监控介绍

  |  
 阅读次数

APM介绍
node多线程模式 接入ELK方式
Node APM平台搭建

如何发现一个 Node.js 应用的问题

道与术→ USE Method 与 APM

Application Performance Management (简称APM)是监控服务的一套技术手段

Utilization(利用率),Saturation(饱和度),Errors(误差)(简称USE) 方法是一种能分析任何系统性能的方法论

1.1 USE Method的概念

资源:应用依赖的硬件资源(CPU,硬盘,内存)

利用率:以资源一个时间段内被使用的百分比来表示,例如:一个CPU以90%的利用率运行

饱和度:某个资源排队的数量

误差/错误:出现异常的数量

node.js常见的 USE Method的指标 CPU/内存/吞吐量 核心的三类指标

1.2 CPU

node.js为 计算密集型(CPU密集型)
另一种为 I/O密集型 磁盘使用率高

CPU的利用率

CPU并非 90%的时间都是在忙着,很大一部分时间在等待,或者说“停顿”了。多数情况下在等待访问内存,其中又以读内存为主。

由于CPU发展比内存快很多,大部分时间,CPU都没有运行,而是在等待内存的返回。所以90%的CPU不一定是因为CPU在忙着计算,过多的内存操作同样可能会导致。

排查计算密集型CPU的利器:火焰图

  • X轴表示时间长度,也就是占用的CPU时间
  • Y轴从上到下,越接近底部表示越接近系统的底层,对于Node.js来说,上层是js代码,下层是C代码
  • 每一层上,每个条幅越宽,表示它在整个运行周期中,占用的CPU越多

如何读懂火焰图? - 阮一峰的网络日志

1.3 内存的USE指标

process.memoryUseage 可以查看Node.js占用的内存

rss 是进程执行分配的总内存

heapTotal 是V8分配的堆的内存大小

heapUsed 是V8执行期间实际使用的内存

external 是进程使用的一些c的系统占用的内存

1.4 Node.js应用最经常出现的问题-内存泄漏

Node.js的底层V8引擎对内存的使用有上限:64位系统约为1.4G,32位系统约为0.7G。所以Node.js对内存使用限制,实际上是因为V8对内存的使用限制。当内存超过这个数,就会出现-内存泄漏

1.5 QPS

QPS ( Query Per Second )用来衡量服务的性能。QPS 指每秒中能执行的query 。QPS 的数值越高, server能处理的request 越多。

QPS是衡量服务能力的核心指标,是跟着每个API挂钩的。不是跟着应用走的

QPS哪怕是同样的一个应用,不同的服务也会有很大的差异

总结

  • APM是服务监控的技术手段,而USE方法则是监控的方法论
  • CPU,内存,吞吐量是Node.js应用需要重点关注的点
  • 学习火焰图和heap dump