最简单实用的profiler(适用于紧急排除线上故障)

       由于IDC的隔离性,在线上机部署YJP,JProfiler等GUI工具很是麻烦,尤其是排除线上故障的时候,一个简单实用的工或许能快速定位到问题,减少停机时间.

       基于btrace写了一个最简单的profiler: 快速profile某个类的所有public方法的执行时间并输出.

 

  安装:

      首先安装btrace, 设置BTRACE_HOME环境变量, 下载源代码: https://github.com/haitaoyao/perf-tools, 安装perf-tools

  使用:

      比如我们想知道hadoop jobtracker 的调用情况,首先生profile 脚本:

hadoop@arch-server:~$ generate_perf_script.sh org.apache.hadoop.mapred.JobTracker hadoop/hadoop-0.20.2-core.jar . 

      生成的脚本以${传入的clas name的simple name}_Script.java 命名, 所以对应JobTracker生成的脚本为JobTracker_Script.java

使用btrace运行脚本:

hadoop@arch-server:~$ jps|grep JobTracker 26545 JobTracker hadoop@arch-server:~$ btrace 26545 JobTracker_Script.java 1308473766502 org.apache.hadoop.mapred.JobTracker#getTaskTracker:(ms) 1 1308473766503 org.apache.hadoop.mapred.JobTracker#getClusterStatus:(ms) 0 1308473766503 org.apache.hadoop.mapred.JobTracker#getClusterStatus:(ms) 0 1308473766503 org.apache.hadoop.mapred.JobTracker#getNumberOfUniqueHosts:(ms) 0 1308473766503 org.apache.hadoop.mapred.JobTracker#getClusterStatus:(ms) 0  

 

      输出内容类似 1308473766502 org.apache.hadoop.mapred.JobTracker#getTaskTracker:(ms) 1 , 其中1308473766502 为时间戳(自1970年时间), org.apache.hadoop.mapred.JobTracke为类名, getTaskTracker为被调用方法名称, 1为方法耗时,单位: 毫秒.

 

通过输的日志, 简单归并整理,就可以知道当前系统对某个类的调用频率,耗时

 

   原理:

     原理其实很简单, 就是实用asm对传入的类进行解析, 找出所有的public方法并生成脚本. 

 

    希望对大家有用!

 

-- EOF --

 

 

 

 

 

 

你可能感兴趣的:(hadoop,脚本,工具,profiler)