Perf工具使用

最近在提升软件性能,用到了Perf工具.网上有很多文章都在介绍,这里只简单记录使用历程.

一、软件必备

我们必须安装perf工具,可以通过yum方式进行安装:

yum install -y perf

使用perf通常和火焰图结合,有了火焰图就比较直观.火焰图用到另外一个软件,可从github中克隆出来

git clone https://github.com/brendangregg/FlameGraph.git

二、脚本

下面是我自己写的脚本,输入进程id或者进程名字用于统计,默认统计时间为45s, 将该脚本放到FlameGraph根目录下面

#!/bin/sh

if [ $# -eq 0 ]; then
  echo "Error: please input proccess name or pid!!!"
  echo "e.g"
  echo " -->  sh flame.sh [ProcessName|Pid] [Sleep Time]"
  exit
fi

SCRIPT_NAME="$0"
PROC_NAME="$1"
SLEEP_TIME=$2

expr $PROC_NAME "+" 10 &> /dev/null  
if [ $? -eq 0 ];then  
    pid=`expr $1 + 0`
else 
    num=`ps -ef | grep "${PROC_NAME}" | grep -v "${SCRIPT_NAME}" | grep -v "grep" | grep -v "bash" | wc -l`
    if [ $num -eq 0 ]; then
      echo "Error: not found process: ${PROC_NAME}."
      exit
    fi
    if [ $num -gt 1 ]; then
      echo "Error: found too many processes."
      exit
    fi
    pid=`ps x | grep "${PROC_NAME}" | grep -v "${SCRIPT_NAME}" | grep -v "grep" | grep -v "bash" | awk '{print $1}'`
fi

if [ "x$SLEEP_TIME" == "x" ]; then
  SLEEP_TIME=45
fi
perf record -F 99 -p $pid -g -- sleep $SLEEP_TIME
perf script -i perf.data &> perf.unfold
./FlameGraph/stackcollapse-perf.pl perf.unfold &> perf.folded
./FlameGraph/flamegraph.pl perf.folded > perf.svg

利用火焰图,能够比较清晰的看出堆栈信息以及时间占用情况.

三、通过命令方式(高级模式)

火焰图是比较直观的方式,通常能够解决大部分问题,但是如果想看指令级别(汇编),就需要通过命令方式.常用命令:

perf report -i perf.data

最终显示界面如下:

进入上图后经常使用的命令:

命令描述
?查看帮助
up/down (上/下键)查看函数内部信息
a选中某个函数,查看汇编信息

四、JAVA程序火焰图使用方法

Java程序也是可以通过火焰图进行定位,具体使用方法可参考: 使用火焰图做性能分析

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值