Linux的CPU性能问题,相信在工作中很容易遇到。这篇文章会总结出一个大概的套路,相信能够解决工作中90%以上的CPU性能问题!

会告诉大家在不同的场景下,cpu性能指标工具如何选择,性能瓶颈怎么找。

CPU性能指标

往下看之前,自己可以先想想cpu性能指标有哪些。

首先,最容易想到的就是CPU的使用率,也是工作中最常见的。

CPU的使用率描述了非空闲时间占总CPU时间的百分比,根据CPU上运行的任务不同,又被分为用户CPU、系统CPU、等待I/O、硬中断和软中断等。

  • 用户CPU使用率,表示CPU在用户态(user)运行的时间百分比,用户CPU使用率越高,一般表示应用程序比较繁忙导致。
  • 系统CPU使用率(sys),表示CPU在内核态运行的时间百分比,系统CPU高,说明内核比较繁忙。
  • 等待I/O的CPU使用率(iowait),表示等待I/O的时间百分比。iowait高说明系统和硬件设备的IO交互时间长,很多时候是由于磁盘性能问题。
  • 还有在虚拟化环境中的steal CPU使用率和客户CPU使用率(guest),steal表示被其他虚拟机占用的CPU时间百分比,和运行客户虚拟机的CPU时间百分比。一般云厂商客户出现这种问题比较多。不过现在steal的使用率一般都被屏蔽了,客户买了虚拟机之后用top看到的指标都是0.

第二个容易想到的应该是平均负载(load average)。也就是系统平均h活跃进程数,它也是我们进程关注的指标,反应了系统的整体负载情况,分别指过去1分钟、5分钟、15分钟的CPU平均负载情况。

正常情况下,平均负载的数字等于CPU的核数,表示CPU使用率刚好被充分利用,大于CPU的核心数,表示CPU负载过重了。

第三个可能会想到进程的上下文切换:

上下文切换,本身是保证Linux正常运行的核心功能,但过多的上下文切换,会将原本运行在进程上的CPU时间,消耗在寄存器、内核栈、以及虚拟内存等数据的保存和恢复上,缩短了进程在CPU上的运行时间,导致性能问题。

还有一个指标是CPU缓存的命中率,可以自行GOOLE,我后面也会专门总结一篇!

我把上面总结的CPU性能指标总结一张图,也方便自己查找和记忆:

性能指标和性能工具来分析:

首先从性能指标出发看,当我们想查看某个指标时,需要知道有哪些工具可以查看。

根据不同的性能指标,对提供指标的性能工具进行分类和理解。

如何迅速分析:

虽然 CPU 的性能指标比较多,但要知道,既然都是描述系统的CPU性能,它们就不会是完全孤立的,很多指标间都有一定的关联。想弄清楚性能指标的关联性,就要通晓每种性能指标的工作原理

举个例子,用户 CPU 使用率高,我们应该去排查进程的用户态而不是内核态。因为用户 CPU 使用率反映的就是用户态的 CPU 使用情况,而内核态的 CPU 使用情况只会反映到系统 CPU 使用率上。

为了缩小排查范围,我通常会先运行几个支持指标较多的工具,如 top、vmstat 和 pidstat 。为什么是这三个工具呢?仔细看看下面这张图,你就清楚了。

这张图里,我列出了 top、vmstat 和 pidstat 分别提供的重要的 CPU 指标,并用虚线表示关联关系,对应出了性能分析下一步的方向。

通过这张图你可以发现,这三个命令,几乎包含了所有重要的 CPU 性能指标,比如:

  • 从 top 的输出可以得到各种 CPU 使用率以及僵尸进程和平均负载等信息。
    从 vmstat 的输出可以得到上下文切换次数、中断次数、运行状态和不可中断状态的进程数。
    从 pidstat 的输出可以得到进程的用户 CPU 使用率、系统 CPU 使用率、以及自愿上下文切换和非自愿上下文切换情况。
  • 另外,这三个工具输出的很多指标是相互关联的,也用虚线表示了它们的关联关系。

作为程序员或者运维都需要知道linux系统优化,这边文章也参考了rehat官方手册和linux专栏。

快速分析CPU性能问题的更多相关文章

  1. intel和AMD CPU性能对比(2016年CPU天梯图)组装电脑必读!

    http://www.365pcbuy.com/article-411.html 特别提示:此文已经于2016年10月12日更新!内容变动较大,请细细品鉴! 如何为客户推荐高性价比机型是我站的重要工作 ...

  2. linux查看CPU性能及工作状态的指令

    http://www.aikaiyuan.com/9347.html http://blog.csdn.net/jk110333/article/details/8683478 http://www. ...

  3. (转)linux查看CPU性能及工作状态的指令mpstat,vmstat,iostat,sar,top

    衡量CPU性能的指标: 1,用户使用CPU的情况:CPU运行常规用户进程CPU运行niced processCPU运行实时进程 2,系统使用CPU情况:用于I/O管理:中断和驱动用于内存管理:页面交换 ...

  4. ARM CPU与Intel x86 CPU性能比较

    Qualcomm ARM CPU与Intel x86 CPU性能比较 随着移动互联网时代的到来,Qualcomm(高通).Texas Instruments(德州仪器)等基于ARM架构的CPU受到越来 ...

  5. CPU性能分析

    CPU性能分析工具 lscpu:查看CPU硬件信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Litt ...

  6. CPU性能过剩提升乏力影响未来行业发展吗?

    导读 虽然CPU仍然在不断发展,但是它的性能已经不再仅仅受限于单个处理器类型或制造工艺上了.和过去相比,CPU性能提升的步伐明显放缓了,接下来怎么办,成为横亘在整个行业面前的大问题. 虽然CPU仍然在 ...

  7. AMD Cpu 性能分析

    未完待续... 首先,几款APU系列的cpu: A8-: 一款低功耗的移动版处理器,四核心主频最高2.5GHz,二级缓存2MB, 图形核心Radeon R5 内存频率DDR3-1866,热设计功耗12 ...

  8. Sql Server CPU 性能排查及优化的相关 Sql

    Sql Server CPU 性能排查及优化的相关 Sql 语句,非常好的SQL语句,记录于此: --Begin Cpu 分析优化的相关 Sql --使用DMV来分析SQL Server启动以来累计使 ...

  9. linux查看CPU性能及工作状态的指令mpstat,vmstat,iostat,sar,top

    转载:http://www.cnblogs.com/xianghang123/archive/2011/08/25/2153591.html 衡量CPU性能的指标: 1,用户使用CPU的情况:CPU运 ...

随机推荐

  1. mybatis使用@Insert @SelectKey 执行插入语句时获得主键自增长值(转)

    @Insert(" insert into table(c1,c2) " + " values (#{c1},#{c2}) ") @SelectKey(resu ...

  2. gtid 1032同步异常处理

    gtid  1032同步异常处理 .sql # 在从库中执行 ; ,); ,); ,); ,); ; mysql> select * from fudao_student_lable; +--- ...

  3. Java 代码的精优化

    一.避免使用BigDecimal(double) BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常. 反例: // BigDecimal 反例 ...

  4. 洛谷比赛 U4858 sum

    U4858 sum 题目提供者666sb666 最新讨论 题目背景 定义一个序列的价值为序列中相邻元素差的绝对值之和. 如序列{2,1,3}的价值为|2-1|+|1-3|=3,而序列{4}的价值为0. ...

  5. curl: (35) Server aborted the SSL handshake 解决办法

    # 先删除curl brew uninstall curl # 重新安装curl,带上--with-openssl brew install curl --with-openssl # 然后重启下ph ...

  6. Java实验课:命令行参数是什么?

    命令行参数:在命令行中给定的参数就是命令行参数.(即从输入位置角度理解). 命令行的参数 1. 什么是命令行的参数? 如: java Test1 365 156 "China" ( ...

  7. 微信小程序_(表单组件)button组件的使用

    微信小程序表单组件button官方文档 传送门 Learn 一.button组件的使用 一.button组件的使用 size:按钮的大小[默认值default] type:按钮的样式类型[默认值def ...

  8. Linux sssd 进程 ldap 客户端配置

    Linux sssd 进程 ldap 客户端配置 标签(空格分隔): ldap authconfig authconfig命令解析:authconfig 面对多计算机的身份管理以及账户信息同步, 其解 ...

  9. 「CF803C」 Maximal GCD

    题目链接 戳我 \(Solution\) 令\(gcd\)为\(x\),那么我们将整个序列\(/x\),则序列的和就变成了\(\frac{n}{x}\),所以\(x\)必定为\(n\)的约数所以现在就 ...

  10. xcode6 如何编译64位iOS应用

    原文:http://mobile.51cto.com/hot-412500.htm 随着iPhone5S的推出,大家开始关心5S上所使用的64位CPU A7. 除了关心A7的性能以外,大家还会关心一个 ...