美文网首页
分析用户cpu使用率很高,但进程cpu使用率都很低的情况

分析用户cpu使用率很高,但进程cpu使用率都很低的情况

作者: _Irving | 来源:发表于2023-02-14 10:29 被阅读0次

    哪种工具适合在第一时间分析进程cpu问题呢,我的推荐是perf。

    perf

    perf top

    perf top 命令用于实时系统分析,其功能与 top 实用程序类似。但是,top 实用程序通常显示给定进程或线程使用的 CPU 时间,perf top 会显示每个特定函数使用的 CPU 时间。在默认状态下,perf top 将告知您用户空间和内核空间的所有 CPU 所使用的函数。

    [root@localhost ~]# perf top
    
    Samples: 55K of event 'cpu-clock', 4000 Hz, Event count (approx.): 10236634002 lost: 0/0 drop: 0/0
    Overhead  Shared Object                             Symbol
      10.94%  [kernel]                                  [k] __do_softirq
       6.51%  libpython2.7.so.1.0                       [.] PyEval_EvalFrameEx
       3.32%  [kernel]                                  [k] _raw_spin_unlock_irqrestore
       3.03%  [kernel]                                  [k] copy_pte_range
       2.95%  [kernel]                                  [k] run_timer_softirq
       2.41%  [kernel]                                  [k] unmap_page_range
       1.28%  [kernel]                                  [k] finish_task_switch
       1.26%  [kernel]                                  [k] __do_page_fault
    
    • 第一行包含三个数据,分别是采样数(Samples)、时间类型(event)和时间总数量(Event count);
    • 第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。
    • 第二列 Shared,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。
    • 第三列 Object,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。
    • 最后一列 Symbol是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。
    perf top -g -p pid
    -g开启调用关系分析,方便根据调用链分析  -p指定进程id
    [wanchao@localhost ~]$ perf top -g -p 21515
    

    按上下方向键切换到我们想查看的进程,再按下回车键展开该进程的调用关系,你会发现那些函数调用占用比例高

    image.png
    perf record
    perf top不保存数据,perf record可以保存数据
    [wanchao@localhost ~]$ perf record -g  #记录性能事件,等待大约15秒后按ctrl+c终止采样
    [wanchao@localhost ~]$ perf report #展示perf top报告
    

    pstree

    pstree用树状形式显示所有进程之间的关系
    当查看用户cpu使用率非常高,但是查看进程的是cpu使用率时,都很低,但是发现一些进程的进程id在频繁改变,这可能两方面的原因:

    • 1、 进程在不停的重启,比如因为段错误、配置错误等等,这时,进程在退出后可能又被监控系统自动重启了
    • 2、 这些进程都是短时进程,也就是在其他应用内部通过exec调用的外面命令。这些命令一般都只运行很短的时间就会结束,你很难用top这种间隔时间比较长的工具发现
    #注:pstree安装不能直接yum install -y pstree,而是:
    [root@localhost ~]# yum install -y psmisc
    #使用pstree就可以查看该不断重启的进程的调用关系了
    [wanchao@localhost yum.repos.d]$ pstree|grep stress-ng
            |-sshd-+-sshd---sshd---bash---su---bash---stress-ng---stress-ng-cpu
    

    execsnoop

    execsnoop是一个专门未短时进程设计的工具,它通过ftrace实时监控进程的exec()行为,并输出短时进程的基本信息,包括PID、父进程pid、命令行参数以及执行的结果

    [wanchao@localhost ~]$ execsnoop  
    

    相关文章

      网友评论

          本文标题:分析用户cpu使用率很高,但进程cpu使用率都很低的情况

          本文链接:https://www.haomeiwen.com/subject/wwchkdtx.html