ubuntu12.4 环境下oprofile的安装

来源:互联网 发布:丛云牙 知乎 编辑:程序博客网 时间:2024/06/15 18:15

一 目的

        安装oprofile的主要目的是观察mapreduce程序在CPU事件这个层次表现出的特征,对比了几个常见工具,最终确定利用operf来进行数据采集。Operf的特征是可以用非root用户profile单进程,并且有效作用于该进程中的任何线程和用fork产生的子进程。

 

二 源代码下载

operf是0.9.8版出现的新工具,可能存在bug,

稳定版下载页面  http://oprofile.sourceforge.net/download/ 

最新源代码下载 git clone git://oprofile.git.sourceforge.net/gitroot/oprofile/oprofile

 

三 依赖库

popt        命令行参数解析

libiberty  GNU libiberty is a software library with a collection ofsubroutines used by variousGNUprograms.

                wiki上有详细解释,http://en.wikipedia.org/wiki/Libiberty

bfd          Binary File Descriptor library

其中libiberty可以单独下载,也可以在binutility中找到,

 

四 安装

1 首先,解压OProfile.0.9.8.tar.gz,  运行autogen.sh

 

2 再运行 configure,

   这个过程会分别提示缺少库popt,libiberty,bfd,分别安装即可;

  对java程序的支持 --with-java=(java安装路径), 

  对内核和模块的支持 --with-kernel=(内核头文件路径)

 一般情况下configure的最终语句应该为 ./configure --with-java=/home/simon/java/current  --with-kernel=/usr/src/linux-headers-3.2.0-29

 

3 make

   检查make的结果,应该生成两个动态库,分别是libjvmti_oprofile.so,libopagent.so,如果没有生成动态库,在configure时加入

  --enable-shared选项。同时operf应该位于子目录pe_profiling下。

 

4 make install

   用root用户安装,默认情况下的安装路径是/usr/local/lib/oprofile

 

五 修改mapreduce的配置

   在hadoop安装目录下,脚本文件$HADOOP_HOME/bin/hadoop,    最前面添加以下两个语句

   OPROFILE_OPTS=" -agentpath:/usr/local/lib/oprofile/libjvmti_oprofile.so "

   HADOOP_OPTS="$OPROFILE_OPTS"

  (此处并非唯一方法,理论上凡是java程序启动并且可以添加启动参数的地方均可修改)

 

六 重新启动hadoop集群

 

七 operf 的使用 (针对单进程)

   operf -p “目标进程号” --vmlinux="当前系统未压缩内核所在路径"  -e “CPU事件名:采样频率”

   例如运行语句:监控tasktracker进程在执行某特定workload的特征,本例监测以下两个CPU事件,

    operf -p 24057 -e CPU_CLK_UNHALTED:6000,INST_RETIRED:6000

   opreport获取结果如下图:

  

   间隔时间执行opreport语句并保存结果到,在运行某特定workload这段时间内获取信息即可描述,CPU事件在此时间序列上的分布,进一步挖掘多个workload在这个层次上的差异。

 

八 常见问题解决

   1 在执行configure oprofile过程中,依赖包已经安装,但是任然提示缺少某库,可能是因为编译依赖库未产生动态库导致,安装依赖库时添加 --enable-shared 选项,

   2 提示找不到 jvmti.h文件,注意给出java的安装路径,

   3 提示找不到operf_events.h 注意给出内核头文件安装路径,若当前系统安装内核头文件,默认应该在/usr/include路径下

   4 运行operf 获取不到已经运行的目标java进程的任何信息,详细请见

     http://sourceforge.net/tracker/?func=detail&aid=3603034&group_id=16191&atid=116191

     用git方式获取的源代码已经解决此问题

 

九 参考资料

    http://oprofile.sourceforge.net/faq/

 

 

 

 

 

 

原创粉丝点击