linux下搭建gperftools工具分析程序瓶颈

news/2024/7/1 2:56:27

1. 先安装 unwind

//使用root
wget https://github.com/libunwind/libunwind/archive/v0.99.tar.gz  
tar -xvf v0.99.tar.gz  
cd libunwind-0.99  
autoreconf --force -v --install  
./configure
make   
sudo make install

2. 安装gperftools

wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.6.1/gperftools-2.6.1.tar.gz

autoreconf -i
./configure
make
sudo make install

以上都ok后,依赖库就好了。 到/usr/local/lib下找一下库有没有。

3. 代码里封装gperftools入口

#include "gperftools/profiler.h"
#include "gperftools/heap-profiler.h"

void gperfCpuStart()
{
#ifdef OPEN_PROFILE
        UtilFile::makeDirectoryRecursive("perf");
        ProfilerStart("perf/cpu.perf");
#endif
};

void gperfCpuStop()
{
#ifdef OPEN_PROFILE
        ProfilerStop();
#endif
};

void gperfCpuFlush()
{
#ifdef OPEN_PROFILE
        ProfilerFlush();
#endif
};

在外部添加一个开关调用上述方法,目的就是可以随时开随时关,方便监控一段时间内的性能。

4. 修改CMake

ADD_LIBRARY(tcmalloc_and_profiler STATIC IMPORTED)
SET_TARGET_PROPERTIES(tcmalloc_and_profiler PROPERTIES IMPORTED_LOCATION /usr/local/lib/libtcmalloc_and_profiler.so)

ADD_LIBRARY(unwind STATIC IMPORTED)
SET_TARGET_PROPERTIES(unwind PROPERTIES IMPORTED_LOCATION /usr/lib64/libunwind.so)

TARGET_LINK_LIBRARIES(Server tcmalloc_and_profiler unwind lzma redis util zlib ss

差不多类似这样,具体情况按照具体的修改。

  • 随后编译程序,在合适的地方开启性能监测,合适的地方再关闭性能检测
  • 关闭后,在程序运行目录下能找到cpu.perf文件

5. 生成可视化文件

pprof --callgrind Server cpu.perf > callgrind.perf.cpu

几分钟后生成callgrind.perf.cpu文件

6. 在window下装个可视化工具

KCachegrind这个挺难找的,直接搜:QCachegrind这个。
用可视化工具打开就能看到了函数调用情况。在这里插入图片描述


http://lihuaxi.xjx100.cn/news/1776486.html

相关文章

n-gram语言模型——句子概率分布计算与平滑

n-gram语言模型——句子概率分布计算与平滑 前言 语言模型 等价假设 n元语法 句子概率分布计算方式 数据平滑 Lidstone平滑(1-gram) Laplace平滑(1-gram) 附上两种平滑在1-gram下代码 Lidstone平滑与Laplace平滑(2-gram) 附上两种平滑在2-gram下代码 前言 语言模型…

消息中间件汇总

RocketMQ和MetaQ的区别 RocketMQ和MetaQ其实是同一种消息队列中间件的两种不同称呼。 在阿里巴巴内部,它被称为MetaQ,而在开源版本中,它被称为RocketMQ。RocketMQ是MetaQ的3.0版本 ONS 阿里ONS是阿里巴巴公司推出的一款分布式消息系统。它基…

classification_report分类报告的含义

classification_report分类报告 基础知识混淆矩阵(Confusion Matrix)TP、TN、FP、FN精度(Precision)准确率(Accuracy)召回率(Recall)F1分数(F1-score) classi…

MySQL窗口函数——让查询变得更简单

文章目录 一、窗口函数概述1、什么是窗口函数2、窗口函数有哪些(1)聚合函数(聚合函数不是本文讨论的重点)(2)专用窗口函数 3、基本语法4、测试数据准备 二、窗口函数使用1、初识窗口函数:使用聚…

k8s docker cgroup驱动问题 —— 筑梦之路

cgroup作用是什么? 在 Linux 操作系统上,控制组(CGroup)用于限制分配给进程的资源。 kubelet 和底层容器运行时都需要对接控制组来强制执行 为 Pod 和容器管理资源 并为诸如 CPU、内存这类资源设置请求和限制。若要对接控制组&a…

java 读取excel/word存入mysql

引入依赖 <!--poi--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artif…

有关自动化的脚本思考 python 按键 javascript

start 说来其实挺巧的&#xff0c;去年年中的时候&#xff0c;有一个同组的同事&#xff0c;由于工作流程需要&#xff0c;经常会打开某一网页&#xff0c;填写某些信息&#xff0c;然后上传特定的代码。 他有一次和我闲聊&#xff0c;他吐槽说&#xff0c;他每天的时间会被这…

『MySQL快速上手』-⑦-基本查询

文章目录 1.Create 创建1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更新1.4 替换2. Retrieve 读取2.1 select 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重2.2 where 条件2.2.1 英语不及格的同学及英语成…