• perf的使用方法(CPU占用高分析)【转】


    perf查看CPU占用高分析

    1. 首先看一下英文给出的解释


    Performance analysis tools for Linux
    Performance counters for Linux are a new kernel-based subsystem that provide a framework for all things performance analysis. It covers hardware level (CPU/PMU, Performance Monitoring Unit) features and software features (software counters, tracepoints) as well.
    Perf是一款内置于Linux内核源码树中的性能剖析工具。
    它基于事件采样原理,以性能事件为基础,支持针对处理器相关的性能指标和操作系统相关性能指标的性能剖析。常用于性能瓶颈的查找和热点代码的定位。

    2. 子工具


    这里的命令需要用root权限 第3部分会对在ubuntu环境中安装perf做详细说明

    perf list

    查看perf 所支持的性能事件

    这里会显示系统支持性能事件 主要有haedware event/software event/hardware cache event/tracepoint event等等(按enter键会显示更多,按q退出)

    perf stat

    用于分析指定程序的性能概况
    例子: perf list ls //分析命令ls

    输出解释如下:
    cpu-clock:任务真正占用的处理器时间,单位为ms
    CPUs utilized = task-clock/time elapsed (CPU的占用率)
    context-swichees:程序在运行过程中的上下文切换次数
    CPU-migrations:程序在运行过程中发生的处理器迁移次数。Linux为了维持多个处理器的负载均衡在特定条件下会将某个任务从一个CPU迁移到另一个CPU。
    CPU迁移和上下文切换:发生上下文切换不一定会发生CPU迁移,而发生CPU迁移时肯定会发生上下文切换。发生上下文切换有可能只是把上下文从当前CPU换出,下一次调度器还是将进程安排在这个CPU上执行。
    page-faults:缺失异常的次数。当应用程序请求的页面尚未建立,请求的页面不在内存中,或者请求的页面虽然在内存中,但物理地址和虚拟地址的映射关系尚未建立时,都会触发一次却也异常。另外TLB不命中,页面访问权限不匹配等情况也会触发缺页异常。
    cycles:消耗的处理器周期数。如果把被ls使用的cpu cycles看成是一个处理器的,那么它的主频为2.486GHz。可以用cycles / task-clock算出。
    stalled-cycles-frontend:指令读取或解码的质量步骤,未能按理想状态发挥并行左右,发生停滞的时钟周期。
    stalled-cycles-backend:指令执行步骤,发生停滞的时钟周期。
    instructions:执行了多少条指令。IPC为平均每个cpu cycle执行了多少条指令。
    branches:遇到的分支指令数。branch-misses是预测错误的分支指令数。

    perf top

    对于一个指定的性能事件(默认是CPU周期)显示消耗最多的函数/命令

    结果显示说明:
    第一列:符号引发的性能事件的比例,默认指占用CPU周期的比例
    第二列:符号所在的DSO(Dynanic Shared Object)可以是应用程序、内核、动态链接库、模块。
    第三列:DSO的类型,[,]表示此符号属于用户态的ELF文件,包括可执行文件与动态链接库。[k]表示此符号属于内核或模块。
    第四列:符号名。有些符号不能解析为函数名,只能用地址表示。

    perf record

    收集采样信息,并将其记录在数据文件中,随后可以用perf report对数据文件进行分析

    例子:

    执行此命令之后当前文件目录中会生成一个perf.dada的文件,即是监控的结果。

    perf report

    读取perf record创建的文件,并给出热点分析结果

    例子:

    perf report -i perf.data //-i表示文件输入

    3.安装perf


    安装内核源码

    yum install linux-source

    执行之后可以在文件目录、usr/src下找到src。解压之后进入tools/perf,.然后执行


    注意:需要root账户执行此命令
    之后就可以在任意目录执行perf相关命令了。

    4.更多


    除了以上5个常用工具外,还有一些适用于较特殊场景的工具, 比如内核锁、slab分配器、调度器,也支持自定义探测点。(这里不做详细阐述)
    参考:
    https://blog.csdn.net/lin443514407lin/article/details/70989879
    https://www.cnblogs.com/arnoldlu/p/6241297.html
    ————————————————

    转自
    版权声明:本文为CSDN博主「wychen_sunshine」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u012679583/article/details/82349364

  • 相关阅读:
    linux驱动开发学习一:创建一个字符设备
    如何高效的对有序数组去重
    找到缺失的第一个正整数
    .NET不可变集合已经正式发布
    中国人唯一不认可的成功——就是家庭的和睦,人生的平淡【转】
    自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
    ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
    自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
    ServiceStack 介绍
    一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
  • 原文地址:https://www.cnblogs.com/paul8339/p/15962990.html
Copyright © 2020-2023  润新知