sudo apt install linux-perf
sudo perf record -F 99 -a -g -p `pidof ./app` -o perf.data -- sleep 30
git clone https://github.com/brendangregg/FlameGraph.git $HOME/FlameGraph
sudo perf script -i perf.data | $HOME/FlameGraph/stackcollapse-perf.pl | $HOME/FlameGraph/flamegraph.pl > perf.svg
获取到的svg可以在浏览器打开,火焰图展示的是调用栈占据cpu时间列表。顶部就是正在执行的函数,宽度表示函数占据的cpu时间
gprof
是一个 GNU 工具,用于分析程序的性能。它通过在程序运行时收集函数调用信息和每个函数的执行时间,生成一个调用图和每个函数的时间统计信息,帮助开发者找出程序中的性能瓶颈。
g++ -pg your_program.cpp -o your_program
./your_program
gprof your_program gmon.out
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
90.00 0.90 0.90 1 0.90 0.90 longRunningFunction
10.00 1.00 0.10 1 0.10 0.10 shortRunningFunction
valgrind
是一个强大的内存调试和性能分析工具集,它可以检测内存泄漏、越界访问、未初始化内存使用等内存相关问题,还可以进行 CPU 性能分析。valgrind
通过在程序运行时对其进行插桩,监控程序的内存操作和 CPU 指令执行情况。
valgrind --leak-check=full --show-leak-kinds=all ./your_program
==1234== HEAP SUMMARY:
==1234== in use at exit: 1024 bytes in 1 blocks
==1234== total heap usage: 1 allocs, 0 frees, 1024 bytes allocated
==1234==
==1234== 1024 bytes in 1 blocks are definitely lost in loss record 1 of 1
==1234== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==1234== by 0x108659: main (your_program.cpp:10)
valgrind --tool=callgrind ./your_program
kcachegrind callgrind.out.<pid>
kcachegrind
会以图形化的方式展示函数调用图和每个函数的性能统计信息,帮助你找出性能瓶颈。