http://blog.sina.com.cn/s/blog_64370f500100nuz3.html
由于Linux操作系统上没有AIX上的tprof命令,为了诊断应用程序消耗CPU的问题,接触到了OProfile(http://oprofile.sourceforge.net/news/)工具。
此工具为Linux 2.6 以后内核中提供的功能,以我所使用的RedHat Enterprise Linux 5为例,uname -a的执行结果为:
Linux RHEL5-64 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
oprofile包名为oprofile-0.9.4-11.el5.x86_64.rpm,对应的gui配置工具包名为oprofile-gui-0.9.4-11.el5.x86_64.rpm。
此外,IBM也提供了用于分析tprof和oprofile结果的应用程序Visual Performance Analyzer(http://www.alphaworks.ibm.com/tech/vpa)。
注意:
- oprofile支持对操作系统内核进行跟踪,这需要指定包含符号表的vmlinux文件(不是vmlinuz)位置,如果当前平台没有经过内核编译,很有可能不存在/boot/vmlinux,这时可以安装操作系统对应的debuginfo包(我这里是kernel-debuginfo-2.6.18-8.el5和kernel-debuginfo-common-2.6.18-8.el5,可以通过yum search kernel-debuginfo查询并安装),安装完成以后就可以在/usr/lib下看到debug目录,vmlinux就位于/usr/lib/debug/lib/modules/[uname -r]/vmlinux,为了方便还可以用ln -s
/usr/lib/debug/lib/modules/[uname -r]/vmlinux /boot/vmlinux创建链接引用; - 对于虚拟机软件,默认的oprofile配置无法得到数据,需要配置oprofile的运行模式为计时器中断模式,具体步骤为:
- 停止当前oprofile:opcontrol --shutdown;
- 可选择备份配置文件:mv /root/.oprofile/daemonrc /root/.oprofile/daemonrc.bak;
- 修改内核oprofile运行模式:modprobe oprofile timer=1(当前会话生效)以及echo "options oprofile timer=1" >> /etc/modprobe.conf(永久生效);
- 通过dmesg | more oprofile命令可以看到一下内容,证明设置生效:
oprofile: using NMI interrupt.
oprofile: using timer interrupt.
- 重新启动oprofile:opcontrol --start,如果收到以下错误,只需移除daemonrc配置文件即可:
because OProfile is in timer mode.