1. 定位cpu瓶颈代码
定位nodejs cpu 性能瓶颈,有好多方法。目的都是为了拿到个火焰图,我试了个遍做个小总结
关于火焰图: 如何读懂火焰图?- 阮一峰, 我的经验就是检查火焰图的大平层,即那些高耗时的函数。Nodejs 是对密集型函数是否敏感的语言,因为cpu密集型计算会阻塞事件循环, 致命的影响QPS,解决干掉那些高cpu 耗时的密集型函数对QPS的提升至关重要。
1.1 v8-profiler
裂墙推荐: https://www.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 文件