news 2026/7/6 3:31:28

保姆级教程:在Ubuntu 22.04上从源码编译安装gperftools(附依赖问题解决)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu 22.04上从源码编译安装gperftools(附依赖问题解决)

保姆级教程:在Ubuntu 22.04上从源码编译安装gperftools(附依赖问题解决)

对于需要在Linux环境下进行性能分析的开发者来说,gperftools无疑是一个强大的工具集。但很多人在源码编译安装过程中常常会遇到各种依赖问题和配置错误。本文将手把手带你完成从源码到成功安装的全过程,特别针对Ubuntu 22.04系统,解决那些官方文档没有详细说明的"坑"。

1. 环境准备与依赖检查

在开始编译安装前,确保系统环境准备充分是成功的关键。Ubuntu 22.04虽然提供了许多开发工具,但仍需要手动安装一些必要的依赖库。

首先更新系统软件包列表:

sudo apt update

1.1 基础编译工具链

gperftools的编译需要完整的开发工具链:

sudo apt install -y build-essential git autoconf automake libtool

1.2 关键依赖库安装

gperftools运行时依赖的几个核心库:

  • libunwind:用于调用栈展开,版本选择很重要
  • pkg-config:帮助定位库文件和头文件
  • zlib:压缩库支持

针对Ubuntu 22.04的正确安装命令:

sudo apt install -y libunwind-dev pkg-config zlib1g-dev

注意:Ubuntu 22.04默认仓库中的libunwind-dev版本是1.3.2,这已经足够新,不需要从源码编译。早期版本可能需要特别注意libunwind的兼容性问题。

2. 源码获取与配置

2.1 克隆源码仓库

建议直接从官方Git仓库获取最新代码:

git clone https://github.com/gperftools/gperftools.git cd gperftools git checkout master # 确保使用最新稳定版

2.2 生成配置脚本

gperftools使用autotools构建系统,需要先生成configure脚本:

./autogen.sh

这个步骤可能会遇到以下问题:

  1. autoconf版本问题

    configure.ac:30: error: possibly undefined macro: AC_PROG_LIBTOOL

    解决方案:

    sudo apt install libtool-bin
  2. automake版本不兼容: 确保automake版本≥1.15:

    automake --version

2.3 配置编译选项

运行configure脚本时,有几个关键选项值得关注:

./configure --prefix=/usr/local \ --enable-frame-pointers \ --disable-dependency-tracking \ --enable-shared

重要参数说明

参数说明推荐设置
--prefix安装路径/usr/local
--enable-frame-pointers提高性能分析精度开启
--disable-dependency-tracking加速编译开启
--enable-shared生成动态库开启

提示:如果计划在多台机器上使用相同的二进制文件,可以添加--build=x86_64-linux-gnu明确指定构建平台。

3. 编译与安装

3.1 并行编译

利用多核CPU加速编译:

make -j$(nproc)

编译过程中可能遇到的典型错误:

  1. undefined reference to 'backtrace': 这是因为缺少libexecinfo库,解决方案:

    sudo apt install libexecinfo-dev
  2. unwind.h not found: 检查libunwind-dev是否安装正确:

    dpkg -L libunwind-dev | grep unwind.h

3.2 安装到系统

编译成功后,安装到系统目录:

sudo make install

3.3 更新动态链接库缓存

避免运行时找不到库文件:

sudo ldconfig

4. 验证安装

4.1 检查安装文件

确认关键文件已正确安装:

ls -l /usr/local/bin/pprof ls -l /usr/local/lib/libprofiler.so

4.2 简单功能测试

运行一个基本性能分析测试:

  1. 创建测试程序test.c
#include <stdlib.h> void func() { malloc(1024); } int main() { for(int i=0; i<100000; i++) func(); return 0; }
  1. 编译并运行分析:
gcc -o test test.c -lprofiler env CPUPROFILE=test.prof ./test
  1. 查看分析结果:
pprof --text ./test test.prof

5. 常见问题解决方案

5.1 动态库加载失败

如果遇到类似错误:

error while loading shared libraries: libprofiler.so.0: cannot open shared object file

解决方案:

echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/gperftools.conf sudo ldconfig

5.2 版本冲突问题

当系统已存在旧版本时,可能导致冲突。彻底移除旧版本:

sudo apt remove google-perftools libgoogle-perftools-dev sudo rm -f /usr/lib/libprofiler.so*

5.3 堆检查器不工作

如果heap checker无法正常工作,尝试:

  1. 确保链接了tcmalloc:

    gcc -o prog prog.c -ltcmalloc
  2. 设置环境变量:

    env HEAPCHECK=normal ./prog

6. 进阶配置与优化

6.1 自定义malloc替代

要完全替代系统malloc,在程序启动时最早调用:

#include <gperftools/tcmalloc.h> __attribute__((constructor)) void init_tcmalloc() { tc_malloc_stats = 1; }

6.2 性能分析采样频率调整

默认采样频率是100次/秒,可以通过环境变量调整:

env CPUPROFILE_FREQUENCY=1000 ./your_program

6.3 内存分析深度配置

对于内存分析,可以控制堆栈跟踪深度:

env HEAP_PROFILE_ALLOCATION_INTERVAL=1048576 \ HEAP_PROFILE_INUSE_INTERVAL=10485760 \ ./your_program

7. 实际应用案例

7.1 分析Nginx性能

对已运行的Nginx进行CPU分析:

  1. 加载profiler到运行中的Nginx:

    sudo gdb -p $(pidof nginx) -ex 'call dlopen("/usr/local/lib/libprofiler.so", 2)' -ex 'detach' -ex 'quit'
  2. 开始分析:

    sudo kill -USR1 $(pidof nginx)
  3. 停止并生成报告:

    sudo kill -USR2 $(pidof nginx) pprof --web /usr/sbin/nginx /tmp/nginx.prof

7.2 长期运行服务监控

对于daemon进程,可以设置定期采样:

env CPUPROFILE=/tmp/service.prof \ CPUPROFILESIGNAL=12 \ ./service & # 每小时采样一次 while true; do kill -12 $(pidof service) sleep 3600 kill -12 $(pidof service) pprof --text ./service /tmp/service.prof.$(date +%s) done

8. 性能分析技巧

8.1 火焰图生成

使用pprof生成更直观的火焰图:

pprof --collapsed ./your_program profile.prof > profile.collapsed git clone https://github.com/brendangregg/FlameGraph ./FlameGraph/flamegraph.pl profile.collapsed > profile.svg

8.2 重点函数分析

只关注特定函数的性能:

pprof --text --focus=MyCriticalFunction ./program profile.prof

8.3 忽略系统库调用

排除标准库的影响:

pprof --text --ignore=::std:: ./program profile.prof

9. 维护与升级

9.1 版本更新

当需要升级gperftools时:

cd gperftools git pull ./autogen.sh make clean ./configure make -j$(nproc) sudo make install

9.2 卸载方法

如需完全移除:

sudo xargs rm < install_manifest.txt sudo ldconfig
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/30 18:05:24

从零搭建Hermes Agent:AI智能体框架原理、安装与实战指南

最近在尝试将AI助手集成到本地开发工作流时&#xff0c;发现市面上的方案要么过于复杂&#xff0c;要么功能单一&#xff0c;直到深入研究了Hermes Agent。它作为一款开源的AI智能体框架&#xff0c;真正实现了让AI助手像本地应用一样&#xff0c;通过自然语言指令直接操作你的…

作者头像 李华
网站建设 2026/7/6 3:30:58

MySQL数据库从入门到实战:核心概念、SQL语法与优化指南

无论是学生时代的课程设计&#xff0c;还是工作后的业务系统开发&#xff0c;数据库都是绕不开的核心技术。而 MySQL 作为全球最流行的开源关系型数据库&#xff0c;以其稳定、高效、易用的特性&#xff0c;成为了无数开发者和企业的首选。然而&#xff0c;很多初学者在入门时&…

作者头像 李华
网站建设 2026/7/6 3:30:57

TVA与具身智能复杂且深刻的结构性关联(8)

前沿技术介绍&#xff1a;AI智能体视觉&#xff08;TVA&#xff0c;Transformer-based Vision Agent&#xff09;是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术&#xff0c;属于“物理AI” 领域的一种全新技术形态&#xff0c;完成了从“虚拟世界”到“…

作者头像 李华
网站建设 2026/6/30 17:57:32

ANNC路线图与未来展望:下一代AI编译器的发展方向与技术趋势

ANNC路线图与未来展望&#xff1a;下一代AI编译器的发展方向与技术趋势 【免费下载链接】ANNC Accelerated Neural Network Compiler. 项目地址: https://gitcode.com/openeuler/ANNC 前往项目官网免费下载&#xff1a;https://ar.openeuler.org/ar/ ANNC&#xff08;A…

作者头像 李华
网站建设 2026/6/30 17:57:12

如何构建自己的机器人数据集:LeRobot数据收集与处理教程

如何构建自己的机器人数据集&#xff1a;LeRobot数据收集与处理教程 【免费下载链接】lerobot_ros2 openEulers work on the ROS2 adaptation of the lerobot AI robot framework also involves modifications to the original lerobot code to support new kinematic models a…

作者头像 李华
网站建设 2026/7/2 15:31:58

UnifiedBus DLock分布式锁:保障超节点数据一致性的关键

UnifiedBus DLock分布式锁&#xff1a;保障超节点数据一致性的关键 【免费下载链接】UnifiedBus-docs Documentation Repository Dedicated to UnifiedBus 项目地址: https://gitcode.com/openeuler/UnifiedBus-docs 前往项目官网免费下载&#xff1a;https://ar.openeu…

作者头像 李华