0

0

快速搞懂Node.js中的性能指标

青灯夜游

青灯夜游

发布时间:2021-09-16 10:10:18

|

3748人浏览过

|

来源于掘金--比心FE

转载

本篇文章带大家了解一下node.js的性能指标,希望对大家有所帮助!

快速搞懂Node.js中的性能指标

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

本文就针对Node.js的基础和性能指标做一些初步的介绍。

应用场景

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

  • BFF中间层,接口的代理,充当网关层

  • 开发构建工具gulpwebpack基于Node.js

  • 桌面应用程序Electron和Node.js结合

  • SSR服务端渲染

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

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

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

优缺点

  • node.js容错,性能不是很好

  • node.js操作数据库不专业

  • node.js处理异步io强

  • io密集型,不适合cpu密集型

事件循环(libuv)

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

1.png

阶段描述

  • 定时器:本阶段执行已经被 setTimeout() 和 setInterval() 的调度回调函数。
  • 待定回调:执行延迟到下一个循环迭代的 I/O 回调。
  • idle, prepare:仅系统内部使用。
  • 轮询:检索新的 I/O 事件;执行与 I/O 相关的回调(几乎所有情况下,除了关闭的回调函数,那些由计时器和 setImmediate() 调度的之外),其余情况 node 将在适当的时候在此阻塞。
  • 检测setImmediate() 回调函数在这里执行。
  • 关闭的回调函数:一些关闭的回调函数,如:socket.on('close', ...)

V8 GC机制

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

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

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

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

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

性能指标

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

系统层面

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

  • 内存使用

  • CPU 使用率

  • 系统负载,使用中进程/等待进行的进程数

  • 系统 QPS

  • 硬性性能指标

  • 磁盘使用率

  • GC 统计

  • ……

进程层面

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

  • 堆内(total 和 used)和堆外内存统计

  • 堆内各个内存空间占用内存统计

  • 垃圾回收(GC)占整个进程运行时间比例

  • QPS

  • 按 1s、15s、30s、60s 的 CPU 统计

  • libuv 句柄,定时器统计

  • ……

如何获取

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

系统层面

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

1、os模块

const os = requie('os')

代码示例

2.png

执行结果

3.png

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

top [参数]

4.png

iostat[参数]

5.png

内存使用情况

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

代码示例

6.png

执行结果:

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

名词解释:

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

外贸网站管理系统中英文双语版
外贸网站管理系统中英文双语版

蓝科外贸网站管理系统中英文双语版v1.8是针对外贸中小企业而开发的具有简单易用、功能强大,性价比高、扩展性好,安全性高、稳定性好的系统,可以加快外贸企业网站开发的速度和减少开发的成本。让不同的用户在懂的少许html语言的基础上,就能够快速的构建一个风格个性化的而功能强大的中英文企业网站。

下载

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

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

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

CPU profile

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

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

7.png

GC trace

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

8.png

node --trace_gc的执行结果

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

9.png

内存快照

10.png

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

压力测试

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

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

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

11.png

上述运行结果可以看到

我们的一个QPS:4301.28/sec

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

传输率:617.47kb/s

内存泄漏

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

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

  • node v8本身内存大小的限制:64 位系统约为 1.4GB,32 位系统约为 0.7GB。

  • 程序使用不当:全局变量引用、闭包使用不当、事件监听未销毁

  • 大文件应用:应该使用buffer操作,buffer不占用v8内存

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

工具使用

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

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

引入

const heapdump = require('heapdump')

获取

方式一:命令 kill -USR2

12.png

方式二:调用writeSnapshot

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

chrome面板分析

13.png

二. alinode

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

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

14.png

一些指标描述

Memory

  • memory_sys:系统内存使用百分比。
  • memory_node: 所有 Node.js 进程内存使用之和占系统内存的百分比。

CPU

  • cpu_sys:系统 CPU 使用百分比。
  • cpu_node:所有 Node.js 进程 CPU 使用百分比之和。

Load

  • load1:1分钟内平均 Load。

  • load5:5分钟内平均 Load。

  • load15:15分钟内平均 Load。

  • 下面是一些 Load 的参考信息 (Load 已经归一化处理,如果是 N 核 CPU,那么相应 Load * N):

    • 0.7 :不错的状态,有新任务也可以及时处理;
    • Load = 1:即将有任务需要额外的等待时间才能被处理,需要引起关注;
    • Load > 5:任务需要等待时间很长,需要干预处理。
    • 通常先看 load15,如果很高,再看 load1 和 load5,看是否有下降趋势,短时间内 load1 大于 1,不用担心,如果长时间 Load 较高,需要引起关注。

QPS

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

GC

  • gc_avg:所有 Node.js 进程垃圾回收时间占比平均值。
  • gc_max:每分钟内垃圾回收时间最多的 Node.js 进程的垃圾回收时间占比。

三. 开源Easy-Monitor

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

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

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

总结

以上是我关于Node.js性能指标以及获取的简单介绍,更多的是对包含性能点的一个整体上的介绍,那针对每个性能指标我们都可以去再做更深入的研究。希望这篇文章能够帮助你,同时也感谢你的阅读,期待再见~

参考

Node.js 性能平台
如何分析 Node.js 中的内存泄漏
本文示例代码

原文地址:https://juejin.cn/post/7008006326857138184作者:比心FE

更多编程相关知识,请访问:nodejs 教程0!!

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

109

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

16

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

136

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

7

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

6

2026.01.26

2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】
2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】

铁路12306提供起售时间查询、起售提醒、购票预填、候补购票及误购限时免费退票五项服务,并强调官方渠道唯一性与信息安全。

122

2026.01.26

个人所得税税率表2026 个人所得税率最新税率表
个人所得税税率表2026 个人所得税率最新税率表

以工资薪金所得为例,应纳税额 = 应纳税所得额 × 税率 - 速算扣除数。应纳税所得额 = 月度收入 - 5000 元 - 专项扣除 - 专项附加扣除 - 依法确定的其他扣除。假设某员工月工资 10000 元,专项扣除 1000 元,专项附加扣除 2000 元,当月应纳税所得额为 10000 - 5000 - 1000 - 2000 = 2000 元,对应税率为 3%,速算扣除数为 0,则当月应纳税额为 2000×3% = 60 元。

35

2026.01.26

oppo云服务官网登录入口 oppo云服务登录手机版
oppo云服务官网登录入口 oppo云服务登录手机版

oppo云服务https://cloud.oppo.com/可以在云端安全存储您的照片、视频、联系人、便签等重要数据。当您的手机数据意外丢失或者需要更换手机时,可以随时将这些存储在云端的数据快速恢复到手机中。

121

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 9.5万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

Node.js-前端工程化必学
Node.js-前端工程化必学

共19课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号