总结:使用 gperftools 进行性能分析
1. 安装 gperftools
使用 gperftools Release页面 下载(不要使用git clone,且不要使用cmake编译,编译不生成pprof
工具),编译命令:
1
2
./configure
make && make install
安装graphviz
:
1
sudo apt-get install graphviz
2. 将 gperftools 链接进待测试程序
如何在CMake
中查找gperftools
的路径,参考笔记 CMake 编写FindPackage 模块
: posts/2024-06-21-cmake-find_package.md
,添加自定义CMake Find Package模块,并在CMakeLists.txt
中添加find_package(gperftools)
,即可找到gperftools
的路径。
编译脚本添加如下:
1
2
3
4
5
6
7
8
9
10
11
option(ENABLE_PROFILER "Enable google perftools" ON)
message(STATUS "ENABLE_PROFILER: ${ENABLE_PROFILER}")
if(ENABLE_PROFILER)
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
find_package(Gperftools REQUIRED)
set(PROFILER_LIBS ${GPERFTOOLS_PROFILER_LIBRARY})
message(STATUS "PROFILER_LIBS: ${PROFILER_LIBS}")
add_definitions("-DHAVE_PROFILER")
else()
set(PROFILER_LIBS "")
endif()
使能frame-pointer:
1
2
3
4
5
6
7
if(ENABLE_PROFILER)
message(STATUS "enable profiler")
target_compile_options(${target_test} PRIVATE -fno-omit-frame-pointer)
target_link_options(${target_test} PRIVATE -fno-omit-frame-pointer)
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer")
# set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fno-omit-frame-pointer")
endif()
3. 使用 gperftools 分析程序性能
运行被测试程序:
1
2
3
4
CPUPROFILE=test_flow_benchmark.prof CPUPROFILE_FREQUENCY=500 ./test --gtest_filter=FlowBenchMarkTest10/FlowBenchMarkTest.*
# 生成pdf报告
pprof --pdf ./server server.prof > perf.pdf
4. 使用 GNU gprof 分析程序性能
1
2
target_compile_options(${target_test} PRIVATE -pg -g)
target_link_options(${target_test} PRIVATE -pg -g)
gprof 不支持多线程应用,多线程下只能采集主线程性能数据。多线程需要重写pthread_create()
。参考:Linux性能优化gprof使用 。
参考
本文由作者按照 CC BY 4.0 进行授权