nodejs cpu火焰图排查性能瓶颈

发布者: xiaozhimn

第一步:安装 v8-profiler

npm install v8-profiler --profiler_binary_host_mirror=https://npm.taobao.org/mirrors/node-inspector/
通过这种方式安装主要是使用node-pre-gyp加速二进制包安装,同时我们采用的是淘宝镜像。
如果安装失败,建议降级node版本到v6.1

第二步:安装flamegraph

npm install flamegraph -g 

第三步:编写测试代码

index.js
var profiler = require('v8-profiler');
var fs = require("fs");
profiler.startProfiling('profile sample');
var result = {};
for(var index = 0; index < 10 * 1024; index++) {
    result[index] = index;
}
var result = JSON.stringify(result);
setTimeout(function() {
    var profileData = profiler.stopProfiling();
    profileData.export(function(err, data) {
        fs.writeFileSync('profileData.cpuprofile', data);
        profileData.delete();
    });
}, 2000);
node index
生成 profileData.cpuprofile的cup使用报文。

第四步:生成火焰图

flamegraph -t cpuprofile -f profileData.cpuprofile -o fg.svg
运行完以上命令会生成一个火焰图的svg文件拖到浏览器中观看结果如下:

f

说明:

X 轴不表示时间刻度,而表示时间长度,也就是占用的 CPU 时间; 
Y 轴从上到下,越接近底部表示越接近系统的底层,对于 Node.js 来说,上层是 js 代码,下层是 C 代码; 
每一层上,每个条幅越宽,表示它在整个运行周期中,占用的 CPU 越多; 
点击任何一个条幅,图像会自动将它置于最底部,同时只留下它之上的条幅,并且放大至全图; 
一般来说,你只需要注意标示出你程序相关的最宽条幅即可,因为往往它就是程序中存在的瓶颈。
0赞