0x nodejs火焰图工具试用

昨天有大概介绍多0x 火焰图,以下是一个简单的试用

环境准备

  • 项目结构
├── README.md
├── ab.sh
├── app.js
├── package.json
└── yarn.lock
  • 代码说明
    flame script 为使用flamebearer 工具,all-in-one 为使用0x
    pacakge.json
{
  "name": "nodejs-flame-graph",
  "version": "1.0.0",
  "main": "app.js",
  "license": "MIT",
  "scripts": {
    "start": "node --perf-basic-prof-only-functions app.js",
    "pprof": "node --prof app.js",
    "all-in-one":"0x app.js",
    "flame": "node --prof-process --preprocess -j isolate*.log | flamebearer"
  },
  "dependencies": {
    "express": "^4.14.1",
    "fast-levenshtein": "^2.0.6"
  },
  "devDependencies": {
    "0x": "^4.9.1",
    "flamebearer": "^1.1.3"
  }
}

app.js 一个express 代码

//app.js
const express = require(‘express‘);
const console = require(‘console‘);
const levenshtein = require(‘fast-levenshtein‘);
var arr=[];
const HOW_OBVIOUS_THE_FLAME_GRAPH_SHOULD_BE_ON_SCALE_1_TO_100 = 10;
?
const someFakeModule = (function someFakeModule () {
return {
  calculateStringDistance (a, b) {
    return levenshtein.get(a, b, {
    useCollator: true
    })
  }
 }
})()
?
const app = express();
?
app.get(‘/‘, (req, res) => {
  res.send(`
  <h2>Take a look at the network tab in devtools</h2>
  <script>
    function loops(func) {
    return func().then(_ => setTimeout(loops, 20, func))
    }
    loops(_ => fetch(‘api/tick‘))
  </script>\
  `)
});
?
app.get(‘/api/tick‘, (req, res) => {
  arr.push({name:‘Shubham‘});
  Promise.resolve(‘asynchronous flow will make our stacktrace more realistic‘.repeat(HOW_OBVIOUS_THE_FLAME_GRAPH_SHOULD_BE_ON_SCALE_1_TO_100))
  .then(text => {
    const randomText =Math.random().toString(32).repeat(HOW_OBVIOUS_THE_FLAME_GRAPH_SHOULD_BE_ON_SCALE_1_TO_100)
    return someFakeModule.calculateStringDistance(text, randomText)
  })
  .then(result => res.end(`result: ${result}, ${arr.length}`))
});
?
app.get(‘/api/end‘, () => process.exit());
?
app.listen(8080, () => {
  console.log(`go to http://localhost:8080/ to generate traffic`)
});

ab.sh 简单压测的

#!/bin/sh
?
ab -n 2000 -c 100 http://localhost:8080/api/tick

启动&&效果

  • 启动
yarn 
yarn all-in-one

  • 停止(ctrl+c) 查看效果
    生成内容

    火焰图

说明

0x 运行的配置选项还是挺多的,功能很强大

参考资料

https://github.com/davidmarkclements/0x
https://github.com/mapbox/flamebearer
https://github.com/rongfengliang/nodejs-flamegraph-learning

原文地址:https://www.cnblogs.com/rongfengliang/p/12151626.html

时间: 2024-10-09 12:54:31

0x nodejs火焰图工具试用的相关文章

pg_flame postgresql EXPLAIN ANALYZE 火焰图工具

pg_flame 是golang 编写的一个将pg的EXPLAIN ANALYZE 转换为火焰图,使用简单 以下是一个简单的demo 环境准备 docker-compose 文件 version: "3" services: postgres: image: postgres:9.6.11 ports: - "5432:5432" environment: - "POSTGRES_PASSWORD:dalong" 源码编译 clone 代码 gi

动态追踪技术(中) - Dtrace、SystemTap、火焰图

http://openresty.org/cn/presentations.html http://weibo.com/agentzh?is_all=1 http://openresty.org/posts/dynamic-tracing/ 动态追踪技术(中) - Dtrace.SystemTap.火焰图 原创 2016-05-06 章亦春 MacTalk 动态追踪技术中篇,关于 DTrace.SystemTap 和 火焰图的那点事. DTrace 与 SystemTap 说到动态追踪就不能不提

nodejs 应用火焰图简单分析

以前有写过一个使用speedscope 的简单说明,以下是一个使用另外一个工具进行火焰图分析的简单说明 环境准备 项目结构 ├── app.js ├── package.json └── yarn.lock 代码说明 app.js //app.js const express = require('express'); const console = require('console'); const levenshtein = require('fast-levenshtein'); var

使用linux perf工具生成java程序火焰图

pre.cjk { font-family: "Nimbus Mono L", monospace } p { margin-bottom: 0.1in; line-height: 120% } a:link { } 重要参考文献:www.brendangregg.com/blog/2017-06-30/package-flame-graph.html Java FlameGraph(火焰图)能够非常直观的展示java程序的性能分析结果,方便发现程序热点和进一步调优.本文将展示如何使用

linux性能分析工具之火焰图

一.环境 1.1 [email protected]:~$ uname -a Linux jello 4.4.0-98-generic #121-Ubuntu SMP Tue Oct 10 14:24:03 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 1.2 [email protected]:~$ lsb_release -a Distributor ID: UbuntuDescription: Ubuntu 16.04.3 LTSRelease: 16.0

火焰图分析openresty性能瓶颈

注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包,然后解压../configure; make; make install 安装到目标主机:执行命令 stap -ve 'probe begin { log("hello systemtap!") exit() }' 如果提示pass 5: run completed ... 就表示安装成

转发 Java火焰图在Netflix的实践

为了分析不同软件或软件的不同版本使用CPU的情况,相关设计人员通常需要进行函数的堆栈性能分析.相比于定期采样获得数据的方式,利用定时中断来收集程序运行时的PC寄存器值.函数地址以及整个堆栈轨迹更加高效.目前,OProfile.gprof和SystemTap等工具都是采用该方法,给出详细的CPU使用情况报告.然而,这些工具在处理复杂的统计数据时,给出的报告往往过于繁杂.不够直观.不能直接反应分析员所需要的数据.为此,Brendan Gregg开发了专门把采样到的堆栈轨迹(Stack Trace)转

使用perf + FlameGraph生成进程火焰图

FlameGraph代码:https://github.com/cobblau/FlameGraph 使用方法 1,perf record --call-graph dwarf -p 12345 2,perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > process.svg 使用其他工具如何生成火焰图的方法在FlameGraph的Readme只有详细的介绍

perf + 火焰图分析程序性能

1.perf命令简要介绍 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果: perf record perf report 举例: sudo perf record -e cpu-clock -g -p 2548 -g 选项是告诉perf record额外记录函数的调用关系 -e cpu-clock 指perf record监控的指标为cpu周期 -p 指定需要reco