Linux性能调优之gprof和oprofile

为了更好的优化程序性能,我们必须找到性能瓶颈点,“好钢用在刀刃上”才能取 得好的效果,否则可能白做工作。

为了找到关键路径,我们可以使用profilng技术,在linux平台上,我们可以使用gprof和oprofile工 具。

  • gprof是GNU工具之一,它在编译的时候在每个函数的出入口加入了profiling的代码,运行时统计程序在用户态的 执行信息,可以得到每个函数的调用次数,执行时间,调用关系等信息,简单易懂。适合于查找用户级程序的性能瓶颈,对于很多时间都在内核态执行的程 序,gprof不适合。
  • oprofile也是一个开源的profiling工具,它使用硬件调试寄存器来统计信息,进 行profiling的开销比较小,而且可以对内核进行profiling。它统计的信息非常的多,可以得到cache的缺失率,memory的访存信 息,分支预测错误率等等,这些信息gprof是得不到的,但是对于函数调用次数,它是不能够得到的。。

简单来说,gprof简单,适合于查找用户级程序的瓶颈,而oprofile稍显复杂,但是得到的信息更多,更适合调试系统软件。
我们以编译运行hello.c为例,来说明如何使用这两个工具,这里不解释具体结果的含义,要想详细了解每个结果代表什么意思,可以看一下参考资料中官方 站点上的doc信息,里面会给你详尽的解释。
gprof Quick Start
gprof是gnu binutils工具之一,默认情况下linux系统当中都带有这个工具。

  1. 使用 -pg 选项来编译hello.c,如果要得到带注释的源码清单,则需要增加 -g 选项。运行: gcc -pg -g -o hello hello.c
  2. 运行应用程序: ./hello 会在当前目录下产生gmon.out文件
  3. 使用gprof来分析 gmon.out文件,需要把它和产生它的应用程序关联起来:
    1. gprof hello gmon.out -p 得到每个函数占用的执行时间
    2. gprof hello gmon.out -q 得到call graph,包含了每个函数的调用关系,调用次数,执行时间等信息。
    3. gprof hello gmon.out -A 得到一个带注释的“源代码清单”,它会注释源码,指出每个函数的执行次数。这需要在编译的时候增加 -g选项。

oprofile Quick Start
oprofile是sourceforge上面的一个开源项目,在2.6内核上带有这个工具,好像只有smp系统才有。比较老的系统,需要自己安装,重新 编译内核。
    oprofile是一套工具,分别完成不同的事情。
op_help: 列出所有支持的事件。
opcontrol:设置需要收集的 事件。
opreport: 对结果进行统计输出。
opannaotate:产生带注释的源/汇编文件,源语言级的注释需要编译源文件时的 支持。
opstack:    产生调用图profile,但要求x86/2.6的平台,并且linux2.6安装了call-graph patch
opgprof:    产生如gprof相似的结果。
oparchive: 将所有的原始数据文件收集打包,可以到另一台机器上进行分析。
op_import: 将采样的数据库文件从另一种abi转化成本地格式。    运行oprofile需要root权限,因为它要加载profile模块,启动oprofiled后台程序等。所以在运行之前,就需要切换到root。

  1. opcontrol --init 加载模块,mout /dev/oprofile 创建必需的文件和目录
  2. opcontrol --no-vmlinux 或者 opcontrol --vmlinux=/boot/vmlinux-`uname -r` 决定是否对kernel进行profiling
  3. opcontrol --reset 清楚当前会话中的数据
  4. opcontrol --start 开始profiling
  5. ./hello 运行应用程序,oprofile会对它进行profiling
  6. opcontrol --dump 把收集到的数据写入文件
  7. opcontrol --stop 停止profiling
  8. opcotrol -h 关闭守护进程oprofiled
  9. opcontrol --shutdown 停止oprofiled
  10. opcontrol --deinit 卸载模块

常用的是3→7这几个过程,得到性能数据之后,可以使用 opreport, opstack, opgprof, opannotate几个工具进行分析,我常用的是opreport, opannotate进行分析。

  1. opreport使用 http://oprofile.sourceforge.net/doc/opreport.html
  2. opannotate使用 http://oprofile.sourceforge.net/doc/opannotate.html
  3. opgprof使用 http://oprofile.sourceforge.net/doc/opgprof.html

最常用的是 opreport,这个可以给出image和symbols的信息,比如我想得到每个函数的执行时间占用比例等信息,用来发现系统性能瓶颈。 opannotate可以对源码进行注释,指出哪个地方占用时间比较多。常用命令如下:

  • opreport -l /bin/bash --exclude-depand --threshold 1 , 用来发现系统瓶颈。
  • opannotate --source --output-dir=annotated /usr/local/oprofile-pp/bin/oprofiled
  • opannotate --source --base-dirs=/tmp/build/libfoo/ --search-dirs=/home/user/libfoo/ --output-dir=annotated/ /lib/libfoo.so

网络资源

      1. gprof 用户手册 http://sourceware.org/binutils/docs-2.17/gprof/index.html
      2. oprofile官方站点 http://oprofile.sourceforge.net/
      3. Linux性能评测工具之一:gprof篇 https://blog.csdn.net/stanjiang2010/article/details/5655143
      4. 使用 GNU profiler 来提高代码运行速度 http://www-128.ibm.com/developerworks/cn/linux/l-gnuprof.html
      5. 使用 OProfile for Linux on POWER 识别性能瓶颈 http://www-128.ibm.com/developerworks/cn/linux/l-pow-oprofile/

原文地址:https://www.cnblogs.com/klcf0220/p/9987398.html

时间: 2024-11-03 20:58:05

Linux性能调优之gprof和oprofile的相关文章

<Linux性能调优指南>主要思路流程

网上IBM很早放出的一本免费电子书, 十来年了,参考意义还是很大. 国内有翻译成中文在线阅读的版本. 见如下两个URL Linux Performance and Tuning Guidelines <Linux性能调优指南> https://www.gitbook.com/book/lihz1990/transoflptg/details ========================================= 服务器优化思路 管理变更流程 管理变更和性能优化并不直接相关,但可能是

Linux性能调优,从优化思路说起

Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的apache.tomcat.mysql.php等等,开源软件的最大理念是自由.开放,那么linux作为一个开源平台,最终要实现的是通过这些开源软件的支持,以最低廉的成本,达到应用最优的性能.因此,谈到性能问题,主要实现的是linux操作系统和应用程序的最佳结合. 一.性能问题综述 系统的性能是指操作系统完成任务的有效性.稳定性和响应速度.Linux系统管理员可能经常会遇到系统不稳定.响

linux 性能调优工具参考 (linux performance tools)

之前发现几张图对于linux使用者有着较强的参考意义,下面对其进行简单备忘: # linux 静态信息查看工具 # linux 性能测试工具 benchmark # linux 性能观测工具 # linux 性能调优工具  资源来源链接:http://www.brendangregg.com/linuxperf.html 保持更新,其中不少工具都有使用过,欢迎大家留言交流:更多内容请关注 cnblogs.com/xuyaowen; 原文地址:https://www.cnblogs.com/xuy

linux性能调优总结

系统性能一直是个热门话题.做运维这几年也一直在搞性能调优,写这个文章也算是对工作的总结. 讲调优第一步是,要讲为什么要调优?也就是系统分析,分析还需要有指标,做好性能监控的情况下,看到确实需要调优才能进行.不能为了调优而 “调优“ 那不是调优,那是破坏. 性能分析的目的 找出系统性能瓶颈 为以后的优化提供方案或者参考 达到良好利用资源的目的.硬件资源和软件配置. 影响性能的因素 想确定有哪些因素,首先确定你的应用是什么类型的?例如: cpu密集型例如web服务器像nginx node.js需要C

Linux性能调优的优化思路

Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的有apache.tomcat.nginx.mysql.php等等,开源软件的最大理念就是自由.开放,那么Linux作为一个开源平台,最终要实现的是通过这些开源软件的支持,以低廉的成本,达到应用最有的性能.因此,谈到性能问题,主要实现的是Linux系统和应用程序的最佳结合. 博文大纲:一.性能问题综述二.影响Linux性能的因素三.分析系统性能设计的人员四.调优总结 一.性能问题综述 系

Linux性能调优

Linux操作系统下挂载硬盘分区的几种方法 简单三步制作会动的Windows 7桌面墙纸 大多数 Linux 发布版都定义了适当的缓冲区和其他 Transmission Control Protocol(TCP)参数.可以修改这些参数来分配更多的内存,从而改进网络性能.设置内核参数的方法是通过 proc 接口,也就是通过读写 /proc 中的值.幸运的是,sysctl 可以读取 /etc/sysctl.conf 中的值并根据需要填充/proc,这样就能够更轻松地管理这些参数.清单 2 展示在互联

【Linux性能调优一】观大局:系统平均负载load average

要测试linux系统性能及调优,首先要从全局检查linux的平均负载 1.什么是平均负载 load average 系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数.也可简单理解为平均活跃进程数. 简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系. 所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runn

linux 性能调优 平均负载

使用 uptime 查看 系统负载情况 load average: 依次则是过去 1 分钟.5 分钟.15 分钟的平均负载 简单来说,平均负载是指单位时间内,系统处于 可运行状态 和不可中断状态 的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系. 所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程. 不可中断状态的进程则是正处于内核态关键流程中的进程,并且这

linux 性能调优

导致cpu负载增高的三个场景: 1.cpu密集型进程 2io密集型,等待io也会导致负载升高,但是cpu使用率不一定很高 3.大量等待cpu的进程调度 cpu寄存器:是cpu内置的容量小,速度极快的内存[保存程序运行时的一些数据] cpu计数器:用来保存cpu正在执行的指令位置或者即将执行的下一条指令位置 cpu上下文切换就是保存当前运行的cpu寄存器和计数器中的数据然后跳转到新的程序计数器位置执行其他进程 频繁的上下文切换会提高cpu负载. 系统调用通常称为特权模式的切换,从ring0切换到r