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

最终显示界面如下:

Perf工具使用_第1张图片

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

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

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

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

你可能感兴趣的:(系统,perf使用,根据名字获取进程id,shell获取进程id,shell判断是否为数字)