• cpu瓶颈分析


    一、cpu性能指标

    1  cpu使用率

    1.1  用户cpu使用率:包括用户态cpu使用率(user)和低优先级用户态cpu使用率(nice),表示cpu在用户态运行的时间百分比。用户cpu使用率高,

    通常说明应用程序笔记繁忙。

    1.2  系统cpu使用率:表示cpu在内核态运行的时间百分比(不包括中断),系统cpu使用率高说明内核比较繁忙。

    1.3  等待I/O的cpu使用率:通常也称为iowait,表示等待I/O的时间百分比。iowait高,通常说明系统与硬件设备的I/O交互时间比较长。

    1.4  软中断和硬中断的cpu使用率:分别表示内核调用软中断、硬中断处理程序的四件百分比,他们的使用率高,通常说明系统发生了大量的中断。

    1.5  虚拟化环境中用到的窃取cpu使用率(steal)和客户cpu使用率(guest),分别表示被其他虚拟机占用的cpu时间百分比,和运行客户虚拟机的cpu时间百分比。

    2  平均负载:也就是系统平均活跃进程数。理想情况,平均负载等于逻辑cpu个数,这表示每个cpu都恰好被充分使用。如果平均负载大于逻辑cpu的个数,就表示负载比较重了。

    3  上下文切换:本身是保证linux正常运行的一项核心功能。但过多的上下文切换,会将原本运行的cpu时间,消耗在寄存器、内核栈以及虚拟内存数据保存和恢复上,缩短进程

    真正运行的时间,成为性能瓶颈。

    4  cpu缓存命中率:cpu的发展速度远远高于内存的发展速度,cpu的处理速度就比内存的访问速度快得多。这样,cpu在访问内存的时候,免不了要等待内存的相应。为了协调这

    两者的巨大性能差距,cpu缓存(通常是多级缓存)就出现了:

    cpu缓存的速度介于cpu和内存之间,缓存是热点的内存数据。根据不断增长的热点数据,这些缓存按照大小不同分为L1、L2、L3等三级缓存,其中L1和L2常用在

    单核中,L3则用在多核中。

    从L1到L3,三级缓存的大小依次增大,相应的性能一次降低(比内存还是好很多)。而他们的命中率,衡量的是cpu缓存的复用情况,命中率越高,则表示性能越好。

    便于理解做了如下热图: 

     二  性能分析工具

    1  平均负载:uptime查看了系统的平均负载,mpstat和pidstat分别观察了每个cpu和每个进程的cpu使用情况,进而找到导致平均负载升高的进程,压测工具stress。

    2  上下文切换:vmstat查看系统上下文切换次数和中断次数,pidstat观察进程的自愿上下文切换和非自愿上下文切换;最后通过pidstat观察进程的上下文切换,找出

    上下文切换次数增多的根源,压测工具sysbench。

    三  快速定位分析:

    实际分析我们可以按照上诉方法进行,但较为盲目,为便于快速定位问题,一般都借助于以下命令:top、vmstat、pidstat,原理图见下:

    --top:可以得到各种cpu的使用情况、僵尸进程、平均负载等信息。

    --vmstat:上下文切换次数、中断次数、运行状态、不可中断状态的进程数。

    --pidstat:进程的用户cpu使用率、系统cpu使用率、自愿上下文切换、非自愿上下文切换、

    上面三个工具的输出信息相互关联。

    四  perf、strace、execsnoop工具的使用:

    这三个工具一般结合具体事例、具体场景使用,基本命令自行百度,后续遇到具体的场景,会将具体用法补录在此。

  • 相关阅读:
    面试再问ThreadLocal,别说你不会
    利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)
    高并发场景下缓存处理的一些思路!
    利用Dockerfile部署SpringBoot项目
    [RH254] 1-运行级别
    [RH134] 12-系统启动
    [安全] HTTPS的理解
    [工具] Wireshark与相关的网络安全
    [Python自学] 爬虫(5)selenium
    [Python自学] 爬虫(4)xpath
  • 原文地址:https://www.cnblogs.com/fengzhihai/p/10235240.html
Copyright © 2020-2023  润新知