记-Nodejs埋点服务-定位cpu瓶颈

本文总结了定位Node.js CPU性能瓶颈的各种方法,包括v8-profiler、perf、Node.js内置探查器、Alinode和NodeX性能分析平台。通过分析火焰图,作者发现了一些高CPU耗时的函数,并提出了相应的优化建议。例如,优化ua-device模块减少正则匹配计算,以及评估并改进utils.formatDate函数的性能。
摘要由CSDN通过智能技术生成

1. 定位cpu瓶颈代码

定位nodejs cpu 性能瓶颈,有好多方法。目的都是为了拿到个火焰图,我试了个遍做个小总结

关于火焰图: 如何读懂火焰图?- 阮一峰, 我的经验就是检查火焰图的大平层,即那些高耗时的函数。Nodejs 是对密集型函数是否敏感的语言,因为cpu密集型计算会阻塞事件循环, 致命的影响QPS,解决干掉那些高cpu 耗时的密集型函数对QPS的提升至关重要。

1.1 v8-profiler

裂墙推荐: speedscope.app/

// 这里使用@hyj1991 base v8-profile(官方不再维护) const profiler = require('v8-profiler-node8'); 
const fs = require('fs');
const profileTime = 60 * 000 const delay = 30 * 000  setTimeout(function () {
    console.log('start profile');
    profiler.startProfiling('CPU profile');
    setTimeout(function () {
      const profile = profiler.stopProfiling();
      console.log('end profile');
      profile.export()
        .pipe(fs.createWriteStream(`cpuprofile-${Date.now()}.cpuprofile`))
        .on('finish', () => profile.delete())
    }, profileTime)
  }, delay)
  
// 压测 // ab -t 300 -c 10 "http://localhost:8030/golden/stat?xxxx" // 当前路径下生成 cpuprofile-1578464113338-v8.cpuprofile

当前路径下生成 cpuprofile-1578464113338-v8.cpuprofile, 那么如何分析呢?

使用 Chrome DevTools

打开Chrome -> 打开开发者工具 -> 点击右上角三个点按钮 -> More tools -> JavaScript Profiler -> Load,加载刚生成的 cpuprofile 文件

v2-186e3db7bdb95d67fdc93a8a2cb577f3_b.jpg

v2-751bb156d6a75fba991f30ac72706211_b.jpg

使用Speedscope

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值