美文网首页Node.js全栈开发vue
Node.js性能优化之CPU篇

Node.js性能优化之CPU篇

作者: shen100 | 来源:发表于2018-12-23 21:37 被阅读71次

    perf + 火焰图

    第一步 安装perf

    yum install perf
    

    第二步 clone FlameGraph

    git clone http://github.com/brendangregg/FlameGraph
    

    第三步 通过perf_basic_prof参数启动node.js程序

    node --perf_basic_prof app.js 
    

    这时,会在/tmp目录下生成 /tmp/perf-3456.map, 即 perf-进程id.map

    第四步 修改/tmp/perf-进程id.map权限

    sudo chown root /tmp/perf-进程id.map
    

    第五步 使用ab进行压测

    ab -k -c 10 -n 2000 "http://localhost/your_api_path"
    

    第六步 执行perf进行采样

    sudo perf record -F 99 -p 进程id -g -- sleep 30
    

    perf record 会将记录的信息保存到当前执行目录的 perf.data 文件中

    • -F 指定了采样频率 99Hz(即每秒 99 次,如果 99 次都返回同一个函数名,那就说明 CPU 在这一秒钟都在执行同一个函数,可能存在性能问题)。
    • -p 指定进程的 pid
    • -g 启用 call-graph 记录
    • -- sleep 30 指定记录 30s

    第七步 生成stacks

    sudo perf script > perf.stacks
    

    使用 perf script 读取 perf.data 的 trace 信息写入 perf.stacks。

    第八步 生成热力图

    ./FlameGraph/stackcollapse-perf.pl --kernel < ./perf.stacks | ./FlameGraph/flamegraph.pl --color=js --hash> ./flamegraph.svg
    

    --color=js 指定生成针对 JavaScript 配色的 svg,即:

    • green:JavaScript
    • blue:Builtin
    • yellow:C++
    • red:System(native user-level, and kernel)

    用浏览器打开 flamegraph.svg


    image

    使用 v8-profiler

    第一步 触发 CPU profiling

    const profiler = require('v8-profiler')
    
    app.get('/cpuprofile', function (req, res) {
        //Start Profiling
        profiler.startProfiling('CPU profile');
        setTimeout(() => {
            //Stop Profiling after 30s
            const profile = profiler.stopProfiling()
            profile.export()
                .pipe(fs.createWriteStream(`cpuprofile-${Date.now()}.cpuprofile`))
                .on('finish', () => profile.delete())
        }, 30000);
        res.send();
    });
    

    生成 cpuprofile-xxx.cpuprofile 文件,该文件的内容其实就是一个大的 JSON 对象

    第二步 使用ab进行压测

    ab -k -c 10 -n 2000 "http://localhost/your_api_path"
    

    第三步 使用Chrome DevTools来分析

    Chrome 自带了分析 CPU profile 日志的工具。打开 Chrome -> 调出开发者工具(DevTools) -> 单击右上角三个点的按钮 -> More tools -> JavaScript Profiler -> Load,加载刚才生成的 cpuprofile 文件。


    image

    第四步 使用火焰图来分析

    首先全局安装 flamegraph 模块:

    $ npm i flamegraph -g
    

    运行以下命令将 cpuprofile 文件生成 svg 文件:

    $ flamegraph -t cpuprofile -f cpuprofile-xxx.cpuprofile -o cpuprofile.svg
    

    用浏览器打开 cpuprofile.svg,如下所示:


    image

    相关文章

      网友评论

        本文标题:Node.js性能优化之CPU篇

        本文链接:https://www.haomeiwen.com/subject/jzrokqtx.html