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. 题解 [ZJOI2008]树的统计Count

    [ZJOI2008]树的统计Count Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u ...

  2. Python之multiprocessing模块的使用

    作用:Python多进程处理模块,解决threading模块不能使用多个CPU内核,避免Python GIL(全局解释器)带来的计算瓶颈. 1.开启多进程的简单示例,处理函数无带参数 #!/usr/b ...

  3. 在java下面配置xml导致idea编译失败

    1.今天遇到一个问题在java配置dao.xml的时候导致,idea编译失败 然后把pom.xml上面的 <build> <resources> <resource> ...

  4. 【Python之路】特别篇--Python文件操作

    文件操作 open函数,该函数用于文件处理 操作文件时,一般需要经历如下步骤: (1)打开文件 (2)操作文件 一.打开文件 文件句柄 = open('文件路径', '模式','编码') 打开文件时, ...

  5. selenium 与appium的关系

    selenium是web端的自动化,appium是app端的自动化,它继承了webdriver(也就是selenium 2) 关系如下:

  6. codeforces643D

    阿狸的基环内向树森林 Background 当阿狸醒来的时候,发现自己处在基环内向森林的深处,阿狸渴望离开这个乌烟瘴气的地方.“明天还有与桃子的约会呢”,阿狸一边走一边说,“可是,这个森林的出口在哪儿 ...

  7. sql查询的常用语句

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database 数据库名 3.说明:备份sql server --- 创建 ...

  8. Vue2实践computed监听Vuex中state对象中的对象属性时发生的一些有趣经历

    今天想实现一个功能,在全局中随时改变用户的部分信息.这时候就想到了用Vuex状态控制器来存储用户信息,在页面中使用computed来监听用户这个对象.看似一个很简单的逻辑,就体现了我基本功的不扎实呀. ...

  9. springboot+dubbo+zookeeper+mybatis

    参考地址:https://www.cnblogs.com/gaopengfirst/p/9555240.html 首先创建一个maven项目: 再在该父项目中创建3个module,分别是:provid ...

  10. C++入门经典-例9.2-重载函数模板,求出字符串的最小值

    1:整形数和实型数编译器可以直接进行比较,所以使用函数模板后也可以直接进行比较,但如果是字符指针指向的字符串该如何处理呢?这时可以通过重载函数模板来实现.通常字符串需要库函数来进行比较,通过重载函数模 ...