第 23 章 oprofile


OProfile 是一个由 oprofile 软件包提供的、全系统范围内的性能监控工具的较低的开销。它使用系统处理器中的性能监控硬件来检索系统中内核和可执行文件的信息,如引用内存时、第二级缓存请求数量以及收到的硬件中断数量。OProfile 还能够对在 Java 虚拟机(JVM)中运行的应用程序进行性能分析。

以下是 OProfile 提供的工具选择:

ophelp
显示系统处理器的可用事件,以及每个事件的简短描述。
operf

主要分析工具。operf 工具使用 Linux 性能事件子系统,它允许 OProfile 使用系统的性能监控硬件与其他工具进行操作。

与之前使用的 opcontrol 工具不同,不需要初始设置,除非使用了 --system-wide 选项,否则在没有 root 权限的情况下可以使用它。

ocount
用于计算出现绝对事件数的工具。它可以计算整个系统、每个进程、每个 CPU 或每个线程的事件。
opimport
将外部二进制格式中的示例数据库文件转换为系统的原生格式。仅在分析不同架构的示例数据库时使用这个选项。
opannotate
如果应用程序使用调试符号编译,则为可执行文件创建一个注解的源。
opreport
读取记录的性能数据,并生成根据配置集规格指定的摘要。可以使用不同的配置集规格从同一配置集数据生成不同的报告。

23.1. 使用 OProfile

operf 是收集性能分析数据的推荐工具。工具不需要任何初始配置,并且所有选项都在命令行中传递给它。与传统的 opcontrol 工具不同,operf 可以运行没有 root 特权。有关如何使用 operf 工具的详细信息,请参阅 《系统管理员指南》 中的使用 operf 章节。

例 23.1. 使用 ocount

以下示例显示了在执行 sleep 实用程序期间使用 ocount 的事件量:

$ ocount -e INST_RETIRED -- sleep 1

Events were actively counted for 1.0 seconds.
Event counts (actual) for /bin/sleep:
Event Count % time counted
INST_RETIRED 683,011 100.00
注意

事件是特定于处理器的处理器实施。可能需要设置选项 perf_event_paranoid,或者将计数限制为仅用户空间事件。

例 23.2. 基本 operf 使用量

在以下示例中,o perf 工具用于从 ls -l ~ 命令收集性能分析数据。

  1. ls 命令安装调试信息:

    # debuginfo-install -y coreutils
  2. 运行性能分析:

    $ operf ls -l ~
    Profiling done.
  3. 分析收集的数据:

    $ opreport --symbols
    CPU: Intel Skylake microarchitecture, speed 3.4e+06 MHz (estimated)
    Counted cpu_clk_unhalted events () with a unit mask of 0x00 (Core cycles when at least one thread on the physical core is not in halt state) count 100000
    samples % image name symbol name
    161 81.3131 no-vmlinux /no-vmlinux
    3 1.5152 libc-2.17.so get_next_seq
    3 1.5152 libc-2.17.so strcoll_l
    2 1.0101 ld-2.17.so _dl_fixup
    2 1.0101 ld-2.17.so _dl_lookup_symbol_x
    [...]

例 23.3. 使用 operf 配置文件 Java 计划

在以下示例中,operf 工具用于从 Java(JIT)程序收集性能分析数据,而 opreport 工具则用于针对每个symbol 数据输出。

  1. 安装本示例中使用的演示 Java 程序。它是 java-1.8.0-openjdk-demo 软件包的一部分,该软件包包含在 Optional 频道中。如需有关如何使用 Optional 频道的说明,请参阅添加 Optional 和 Supplementary 软件仓库。启用 Optional 频道时,安装软件包:

    # yum install java-1.8.0-openjdk-demo
  2. OProfile 安装 oprofile-jit 软件包,以便能够从 Java 程序收集性能分析数据:

    # yum install oprofile-jit
  3. OProfile 数据创建一个目录:

    $ mkdir ~/oprofile_data
  4. 使用演示程序更改到该目录:

    $ cd /usr/lib/jvm/java-1.8.0-openjdk/demo/applets/MoleculeViewer/
  5. 启动配置集:

    $ operf -d ~/oprofile_data appletviewer \
    -J"-agentpath:/usr/lib64/oprofile/libjvmti_oprofile.so" example2.html
  6. 进入主目录并分析收集的数据:

    $ cd
    $ opreport --symbols --threshold 0.5

    示例输出可能类似如下:

    $ opreport --symbols --threshold 0.5
    Using /home/rkratky/oprofile_data/samples/ for samples directory.
    CPU: Intel Ivy Bridge microarchitecture, speed 3600 MHz (estimated)
    Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
    samples  %        image name               symbol name
    14270    57.1257  libjvm.so                /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.el7_1.x86_64/jre/lib/amd64/server/libjvm.so
    3537     14.1593  23719.jo                 Interpreter
    690       2.7622  libc-2.17.so             fgetc
    581       2.3259  libX11.so.6.3.0          /usr/lib64/libX11.so.6.3.0
    364       1.4572  libpthread-2.17.so       pthread_getspecific
    130       0.5204  libfreetype.so.6.10.0    /usr/lib64/libfreetype.so.6.10.0
    128       0.5124  libc-2.17.so             __memset_sse2
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.