前 言

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.

- Donald Knuth -

『过早的优化是万恶之源』

说出这句话的计算机科学先驱Donald Knuth并不是反对优化,而是强调要对系统中的关键位置进行优化。

假设一个for循环耗时0.01秒,即使使用循环展开等各种奇技淫巧将其性能提升100倍,把耗时降到0.00001秒,对于用户而言,也基本无法感知到。对性能问题进行量化测试之前,在代码层面进行各种炫技式优化,可能不仅提升不了性能,反而会增加代码维护难度或引入更多错误。

『没有任何证据支撑的优化是万恶之源』

在对系统施展优化措施前,一定要对系统进行详尽的性能测试,从而找出真正的性能瓶颈。

奋战在FISCO BCOS性能优化的前线上,我们对如何使用性能测试工具来精确定位性能热点这件事积累了些许经验心得。本文将我们在优化过程中使用到的工具进行了整理汇总,以飨读者。

1.Poor Man's Profiler

穷人的分析器,简称PMP。尽管名字有些让人摸不着头脑,但人家真的是一种正经的性能分析手段,甚至有自己的官方网站https://poormansprofiler.org/。

PMP的原理是Stack Sampling,通过调用第三方调试器(比如gdb),反复获取进程中每个线程的堆栈信息,PMP便可以得到目标进程的热点分布。

第一步,获取一定数量的线程堆栈快照:

pid=$(pidof fisco-bcos)num=10for x in $(seq 1 $(num))  do    gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid    sleep 0.5done 

第二步,从快照中取出函数调用栈信息,按照调用频率排序:​​​​​​​

awk '  BEGIN { s = ""; }   /^Thread/ { print s; s = ""; }   /^\#/ { if (s != "" ) { s = s "," $4} else { s = $4 } }   END { print s }' | \sort | uniq -c | sort -r -n -k

最后得到输出,如下图所示:

从输出中可以观察到哪些线程的哪些函数被频繁采样,进而可按图索骥找出可能存在的瓶颈。

上述寥寥数行shell脚本便是PMP全部精华之所在。

极度简单易用是PMP的最大卖点,除了依赖一个随处可见的调试器外,PMP不需要安装任何组件,正如PMP作者在介绍中所言:『尽管存在更高级的分析技术,但毫无例外它们安装起来都太麻烦了……Poor man doesn't have time. Poor man needs food.』

区块链 Fisco bcos 智能合约(22)-全面的性能分析工具相关推荐

  1. 区块链 Fisco bcos 智能合约(19)-区块链性能腾飞:基于DAG的并行交易执行引擎PTE

    在区块链世界中,交易是组成事务的基本单元. 交易吞吐量很大程度上能限制或拓宽区块链业务的适用场景,愈高的吞吐量,意味着区块链能够支持愈广的适用范围和愈大的用户规模. 当前,反映交易吞吐量的TPS(Tr ...

  2. 【区块链DAPP】智能合约概述

    智能合约概述 智能合约是运行在区块链公链上的一种代码,该代码由Solidity编写,并通过区块链的智能合约虚拟机来执行,以达到对区块链编程的目标.可以将区块链公联理解为操作系统,Solidity是编写 ...

  3. 区块链中的智能合约是什么?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. "智能合约是一套以数字形式定义的承诺,承诺控制着数字资产并包含了合约参与者约定的权利和义务,由计算机系统自动执 ...

  4. 行走在区块链上的智能合约

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 我和你打一个赌,我赌明天是雨天,你赌是晴天,赌注100大洋.假设明天是晴天,然后你跑过来管我要100大洋的赌金,我装疯卖 ...

  5. 分享实录|区块链技术与智能合约入门(开发实例)

    2019独角兽企业重金招聘Python工程师标准>>> 1 什么是区块链 1.1白话讲解区块链 现在区块链特别火,可能大家都听说过区块链,听说过比特币,那到底什么是区块链? 前几天和 ...

  6. fisco bcos 智能合约开发

    项目需求2张表:资源表.资源访问记录表,需要资源上链智能合约.访问记录上链智能合约.以及资源所有权转移智能合约. FISCO BCOS提供合约KV存储接口开发模式,可以通过合约创建表,并对创建的表进行 ...

  7. 区块链 fisco bcos 2.72 在多机器上部署多个docker节点 ubuntu

    一.安装 1. 安装依赖 安装curl.openssl: sudo apt-get update sudo apt install -y curl openssl 2. 安装docker: (1)安装 ...

  8. 区块链技术:智能合约入门

    什么是智能合约 一个智能合约是一套以数字形式定义的承诺(promises) ,包括合约参与方可以在上面执行这些承诺的协议.一个合约由一组代码(合约的函数)和数据(合约的状态)组成,并且运行在以太坊虚拟 ...

  9. 区块链中的“智能合约”有何应用?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 如刺金般闪耀的区块链时代,投资者的热潮还将持续升温,与此同时金融的大佬已经开始注意到区块链应用落地场景的实现,在金融界实 ...

最新文章

  1. codevs1032
  2. python ssh模块_windows下python SSH的使用——paramiko模块
  3. 阿里P8架构师谈:什么是缓存雪崩?服务器雪崩的场景与解决方案
  4. HIVE 1.1.0 启动时报错: Unsupported major.minor version 51.0
  5. unity 多选枚举
  6. java park_我可以在纯Java中实现park / unpark方法吗?
  7. php 生成xls解决乱码,怎么解决php导出excel文件乱码问题
  8. Hadoop安装教程单机/伪分布式配置
  9. 主流的质量管理和项目管理及研发管理体系探索
  10. java下载服务器资源
  11. Retinex图像增强算法的优势分析
  12. 破血伐木,千里追踪,梦幻奇游新法诀体验
  13. meanshift聚类算法跟踪原理
  14. 邮箱、微信号、手机号正则验证
  15. linux下的时间 date 和 hwclock命令
  16. DELL电脑无法感应到插入耳机
  17. 婚宴座位图html5,大型婚宴 婚礼座位安排(图)
  18. POI操作Excel:cell的背景颜色对照表
  19. 普利姆算法实现 C语言版 + C++版 +例题“村村通工程”
  20. 学校计算机ip设置路由器,如何设置计算机的固定IP地址和路由器?

热门文章

  1. el-table表单增加show-summary表尾合计,表格错位和高度计算错误
  2. 【网易编程题】小易魔法王国采购魔法神器
  3. python跑一千万次循环要多久_进行一亿次MD5需要耗时多久?
  4. CAM图纸管理系统cad雕刻裁切系统
  5. Mobius反演总结
  6. 计算机达到什么水平可以接活,计算机一般达到什么水平才能被接受?
  7. 利用PIL库创建空白图像
  8. delphi2007下载地址
  9. CComObject 。。。(转)
  10. 基于汇编语言的DS18B20温度传感器设计