linux perf工具使用

 linux perf工具生成火焰图

注意:这个脚本依赖编译程序时启用帧指针,也就是CMakeLists.txt的CMAKE_CXX_FLAGS和CMAKE_C_FLAGS中添加-fomit-frame-pointer,如果项目中不让启用帧指针,那就修改perf record -a -g -p <pid>为perf record --call-graph dwarf -p <pid>。

#!/bin/bash

cd "$( cd "$( dirname $0 )" && pwd )"

# sudo passwd
echo 123 | sudo -S service runtime* status

PerfPath=/usr/lib/linux-tools/$(uname -r)
if [ ! -d "$PerfPath" ]; then
    sudo apt-get install linux-tools-"$(uname -r)"
fi

if [ ! -f "$PerfPath/perf" ]; then
    echo "Perf path error"
    exit 0
fi

FlameGraph_PATH="/home/master/FlameGraph"
if [ ! -d "$FlameGraph_PATH" ]; then
   echo -e "FlameGraph path error"
   exit 0
fi

precise_waiting()
{
   if [ $? -ne 0 ]; then
       echo "$1 ERROR"
       exit 0
   fi

   while ps -ef | grep "$1" | grep -v grep; do
      sleep 1
      continue
   done
}

do_Log()
{
   if [ -f "$2" ]; then
      echo "$1 finish"
   else
      echo "$1 ERROR"
      exit 0
   fi
}

PID=`ps -aux | grep 'TestProject' | grep -v grep | awk '{print $2}'`
if [ ! -n "$PID" ]; then
    echo "TestProject not running"
    exit 0
fi
echo "TestProject PID:$PID"

# st1
sudo $PerfPath/perf record -a -g -p $PID
precise_waiting "sudo perf record"
do_Log "record" "perf.data"

# st2
sudo $PerfPath/perf script > out.perf
precise_waiting "sudo perf script"
do_Log "script" "out.perf"

# st3
$FlameGraph_PATH/stackcollapse-perf.pl out.perf > out.folded
precise_waiting "stackcollapse"
do_Log "stackcollapse" "out.folded"

# st4
$FlameGraph_PATH/flamegraph.pl out.folded > TestProject-$PID.svg
precise_waiting "flamegraph"
do_Log "flamegraph" "TestProject-$PID.svg"

sudo rm out.folded out.perf perf.data

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值