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. EOS dice移到1.8版本的修改汇总

    EOS dice移到1.8版本的修改汇总 1. CORE_SYMBOL 被去掉了,需要自己在文件中声明eg: uint64_t string_to_symbol_c(uint8_t precision ...

  2. [旧版] CASthesis 模板编译的问题

    写在前面的话:国科大最新版的模板在这里(https://github.com/mohuangrui/ucasthesis),利用它来写博后出站报告的相关介绍在这里: 本篇博文是针对另一个模板进行介绍的 ...

  3. Laravel 引入第三方类库及自定义函数

    1.新建一个目录放第三方类库 2.找到composer.json文件打开,在里面autoload 下classmap下面加入类库路径 3根目录下运行composer dumpautoload 4.使用 ...

  4. nginx负载均衡 页面缓存

    nginx的upstream目前支持4种方式的分配 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,weight ...

  5. 《剑指offer》算法题第九天

    今日题目: 整数中1出现的次数 把数组排成最小的数 丑数 第一个只出现一次的字符位置 今天的题目相对比较难,特别是第1题和第3题很考验数学功底,下面我们一题一题来看看. 1.整数中1出现的次数 题目描 ...

  6. LibreOffice/Calc:取消单元格中的超链接

     造冰箱的大熊猫@cnblogs 2019/2/27 在LibreOffice Calc的表格中输入电子邮箱地址或者网址后,软件会自动将输入内容转换为超链接形式显示.在某些情况下这种自动转换并非用户所 ...

  7. VirtualbBox:UEFI环境下安装VirtualBox

    造冰箱的大熊猫@cnblogs 2018/12/18 1.问题 在一台新计算机上安装VirtualBox,启动虚拟机时出现“Kernel driver not installed (rc=-1908) ...

  8. Android蓝牙通信

    Android为蓝牙设备之间的通信封装好了一些调用接口,使得实现Android的蓝牙通信功能并不困难.可通过UUID使两个设备直接建立连接. 具体步骤: 1. 获取BluetoothAdapter实例 ...

  9. 一个服务器的Apache2.4.6配置多个域名

    进入到Apache的配置文件:cd /etc/httpd/conf/http.conf 在后面添加: <VirtualHost *:80> # This first-listed virt ...

  10. 2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础

    2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础 1.基础问题 SQL注入攻击原理,如何防御 原理: SQL注入指攻击者在提交查询请求时将SQL语句插入到请求内容中,同 ...