文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Node.js中性能指标的示例分析

2024-04-02 19:55

关注

小编给大家分享一下Node.js中性能指标的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

对于我们前端工程师来说,掌握Node.js应用开发是我们走上资深/专家的一条必经之路。此外Node.js是一门服务端语言,我们不仅要能够完成开发任务,而且更应该要关注服务器性能。

应用场景

在介绍NodeJS性能指标之前呢,我们先来看看它的应用场景,针对不同的应用场景,所要关注的性能指标是有所不同的。

Node.js如果是用于前端SSR的话,那么CPU网络就会成为主要的性能瓶颈

如果使用NodeJS来进行数据持久化相关的工作,那么I/O磁盘会有很高的占用率;

而在大多数场景下,CPU内存以及网络可以说是Node的主要性能瓶颈。

优缺点

事件循环(libuv)

这里引用官网的一张图,展示了事件循环操作顺序的简化概览

Node.js中性能指标的示例分析

阶段描述

V8 GC机制

我们知道Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,同时它又是单线程的。

其中 V8内存 分为新生代和老生代 :

新生代:采用from空间->to空间内存回收scavenge算法

老生代:采用引用标记、碎片整理的形式进行内存回收

如果GC时间过长,会导致js线程阻塞,影响服务性能。内存使用不当,则会造成内存溢出。了解了以上Node.js的基础知识之后,我们再来看性能指标

性能指标

我们从系统层面和Node.js进程层面进行一个性能指标描述

系统层面

针对服务器(物理机虚拟机Docker 等)级别,提供如下监控指标:

进程层面

针对每个 Node.js 进程,提供如下监控指标:

如何获取

针对上面讲到的性能指标,我们该如何获取呢?

系统层面

系统层面的指标可以通过以下两种方式获取

1、os模块

const os = requie('os')

代码示例

Node.js中性能指标的示例分析

执行结果

Node.js中性能指标的示例分析

2、top和iostat命令查看内存和硬盘使用

top [参数]

Node.js中性能指标的示例分析

iostat[参数]

Node.js中性能指标的示例分析

内存使用情况

//该方法返回 Node.js 进程的内存使用情况的对象
process.memoryUsage()

代码示例

Node.js中性能指标的示例分析

执行结果:

{
  rss: 4935680,
  heapTotal: 1826816,
  heapUsed: 650472,
  external: 49879
}复制代码

名词解释:

rss 是驻留集大小, 是给这个进程分配了多少物理内存(占总分配内存的一部分)

一般这个指标上升,可能会发生内存泄漏

heapTotal 和 heapUsed 代表 V8 的内存使用情况。

external 代表 V8 管理的,绑定到 Javascript 的 C++ 对象的内存使用情况。

CPU profile

一般来说,如果涉及到内存泄漏的,可以抓取 堆快照,那如果是 CPU 异常飙高的,可以抓取 CPU Profile

可通过以下两种方式进行获取:

Node.js中性能指标的示例分析

GC trace

V8提供了很多node.js程序启动的参数选项,通过以下实例代码的方式可以获取到GC日志的信息

Node.js中性能指标的示例分析

node --trace_gc的执行结果

可以看到V8对于新老内存采用不同的GC过程

Node.js中性能指标的示例分析

内存快照

Node.js中性能指标的示例分析

如果使用 node-inspector 的话,快照中会有前端的变量干扰。推荐使用 heapdump 用来保存内存快照,使用 devtool 来查看内存快照。使用 heapdump 保存内存快照时,只会有 Node.js 环境中的对象,不会受到干扰。后面会介绍heapdump的使用

压力测试

项目上线前是要进行压力测试的,通过压力测试来寻找是否存在内存泄漏

压测工具:ab测试(ApacheBench)、autocannon

下面展示了使用ab功能进行压力测试的结果

Node.js中性能指标的示例分析

上述运行结果可以看到

我们的一个QPS:4301.28/sec

每个请求的平均时长:23ms

传输率:617.47kb/s

内存泄漏

Node.js相对比较专业的后端语言Java、PHP等,一些基础的建设相对是不够完善的。加上单线程的特点,在大型的应用当中,很容易引起服务器或者Node.js进程的性能瓶颈。

引起node内存泄漏通常有以下三种情况:

那如何去排查内存泄漏呢?可以通过以下工具使用

工具使用

一. heapdump:生成内存快照 + chrome面板分析

需要注意的是,打印内存快照是很耗 CPU 的操作,可能会对线上业务造成影响。

引入

const heapdump = require('heapdump')

获取

方式一:命令 kill -USR2 <pid>

Node.js中性能指标的示例分析

方式二:调用writeSnapshot

heapdump.writeSnapshot('./' + Date.now() + '.heapsnapshot');

chrome面板分析

Node.js中性能指标的示例分析

二. alinode

阿里云也提供了Nodejs应用的性能平台alinode,可以很方便、全面的为我们收集性能指标数据,同时以可视化图表的方式,更加的直观。接入alinode可参考5分钟快速入门

以下是部分采集数据图表展示

Node.js中性能指标的示例分析

一些指标描述

Memory

CPU

Load

QPS

该实例所有 Node.js 进程每秒钟处理的 HTTP 请求数之和。

GC

三. 开源Easy-Monitor

企业级 Node.js 应用性能监控与线上故障定位解决方案。

Easy-Monitor是一款轻量级的Node性能监控工具。快速入口

我们也可以给予它的基础之上去搭建部署一套自己内部的性能平台。

以上是“Node.js中性能指标的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯