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. SpringCloud之网关 Gateway(五)

    前面我们在聊服务网关Zuul的时候提到了Gateway,那么Zuul和Gateway都是服务网关,这两个有什么区别呢? 1. Zuul和Gateway的恩怨情仇 1.1 背景 Zuul是Netflix ...

  2. 编译原理--02 自顶向下、自底向上的LR分析复习(清华大学出版社第3版)

    前言 目录 01 文法和语言.词法分析复习 02 自顶向下.自底向上的LR分析复习 03 语法制导翻译和中间代码生成复习 04 符号表.运行时存储组织和代码优化复习 第4章 自顶向下的语法分析方法 确 ...

  3. 【Python之路】特别篇--property()函数 和 @property 装饰符

    Python中有一个被称为属性函数(property)的小概念,它可以做一些有用的事情.在这篇文章中,我们将看到如何能做以下几点: 将方法转换为只读属性 重新实现一个属性的setter和getter方 ...

  4. swagger2 常用注解说明

    常用到的注解有: Api ApiModel ApiModelProperty ApiOperation ApiParam ApiResponse ApiResponses ResponseHeader ...

  5. HZOJ 20190719 那一天我们许下约定(dp+组合数)

    这个题目背景真的是让我想起了当年... 不说了,言归正传,这题,一眼看去30分暴力还是很好拿的,但我因为考试时的心态问题没有处理好细节爆了零. 30分暴力的普遍思路的复杂度应该是$O(nmd)$的,但 ...

  6. 『ZJOI2019 D2T2』语言

    ~~ 话说,本题考场想出三只\(log\)的暴力做法,被卡成暴力了.~~ 题目分析 首先考虑枚举每一个点,计算这个点可以和多少点进行交易. 将所有经过该点的路径\(s,t\)拿出,那么这些极远的\(s ...

  7. codeforces340C

    Tourist Problem CodeForces - 340C Iahub is a big fan of tourists. He wants to become a tourist himse ...

  8. HashMap在什么场景下会由哪些内部方法导致线程不安全,至少给出一种场景

    一直以来只是知道HashMap是线程不安全的,但是到底HashMap为什么线程不安全,多线程并发的时候在什么情况下可能出现问题? HashMap底层是一个Entry数组,当发生hash冲突的时候,ha ...

  9. TCP 之 TCP_NEW_SYN_RECV状态

    概述 以前的TCP请求控制块没有独立的状态,而是依赖于他们的父控制块的状态,也就是TCP_LISTEN状态,现在要把请求控制块加入到全局的ehash中,所以需要一个状态,而TCP_SYN_RECV状态 ...

  10. SpringBoot2.X 静态文件配置

    Spring Boot 默认会挨个从 META/resources > resources > static > public 里面找是否存在相应的资源,如果有则直接返回. 默认配置 ...