专栏首页只喝牛奶的杀手开发应该知道的Linux系统分析-CPU篇

开发应该知道的Linux系统分析-CPU篇

为什么服务器的CPU就百分之百了呢?CPU的负载为什么如此的高?

如何获取CPU的信息

/proc/cpuinfo是可以获取系统CPU信息比如物理CPU的个数 每个CPU的物理核心数量 CPU的型号和主频等信息。

简要介绍一下proc文件系统,因为所有的性能监控工具获取的性能指标都是从proc文件系统获取并计算得出的.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数.由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的. proc文件系统包含很多文件,其中/proc/cpuinfo和/proc/stat是CPU信息文件。

谁在消耗CPU

系统调度器会调度两件事情:线程和中断这两者消耗CPU,消耗CPU是有优先级区别的:[1] 中断 设备通知内核处理完成,[2] 内核态进程,[3] 用户态进程。

CPU相关的概念读懂CPU监控数据,需要了解三个概念:

  • 中断Interrupt
  • 上下文切换Context Switches
  • 运行队列run queues

Interrupt

硬中断性能测试中关注的中断,主要由IO设备所产生,如键盘的一次按键,网卡接收报文等等IO设备所发出的IRQ(Interrupt ReQuest)请求叫做中断请求(可屏蔽中断)每个能够发出中断的IO设备都有一个IRQ输出线(部分高级千兆网卡,和大部分万兆网卡都多条IRQ输出线)。每条IRQ输出线和可编程中断控制器(Programmable Interrupt Controller)引脚相关联。每个IRQ输出线的中断信号,只能被一个CPU core处理,IRQ线从0开始编号。

软中断例如:NET_TX_SOFTIRQ 把数据包传送到网卡NET_RX_SOFTIRQ 从网卡接收数据包每个CPU都有自己的ksoftirqd/n(n为CPU的逻辑号码)每个ksoftirqd/n内核线程都运行ksoftirqd()函数来处理自己的终端队列上的软中断。

Context Switches

Linux Kernel会把每个核当做一个独立的处理器,双核=两个处理器一个独立的Linux Kernel一次可以运行50~50000进程;如果只有一个CPU,内核就要调度平衡这些进程;每个进程都会分配到一定的CPU时间一旦超时就会被高优先级的抢占掉(比如硬件中断)被扔回队列,这就是所谓的上下文切换每次上下文切换,线程所需要的资源就从CPU寄存器移除转移到队列里面

系统除了第一个进程是“手工”建立以外, 其余的都是进程使用系统调用 fork 创建的新进程。内核程序使用进程标识号(process ID, pid)来标识每个进程。进程由可执行的指令代码、数据和堆栈区组成。进程中的代码和数据部分分别对应一个执行文件中的代码段、数据段。每个进程只能执行自己的代码和访问自己的数据及堆栈区。进程之间相互之间的通信需要通过系统调用了进行。对于只有一个 CPU 的系统,在某一时刻只能有一个进程正在运行。内核通过调度程序分时调度各个进程运行。

Run Queue

每个CPU都会维护自己的运行队列Run Queue.理想状态下调度器应该不断的运行执行进程.进程要么是处于sleep态(阻塞等待IO),要么是运行态.如果CPU高负荷,调度器可能无法及时响应系统请求.结果就是可执行的进程就会填满运行队列.队列越长,需要等待的时间越长。

CPU Utilization

对Linux系统,CPU的系统指标主要有八个:用户态(user)、低优先态(nice)、系统态(sys) 、空闲态(idle)、磁盘I/O等待态(iowait)、硬中断态(irq)、软中断态( softirq )、丢失态(steal)。

CPU利用率= (user+ nice+ sys + iowait+ irq+ softirq+ steal )/ 单位时间×100%

CPU利用率= (1 - idle)/ 单位时间×100%

vmstat指令:是一个运行起来成本比较小的工具(low-overhead),即使在服务器压力非常大的情况下也可以使用;这个工具有两种模式:average模式和sample模式 前者是平均情况,后者可以定时采样。

top指令:运行中可以通过 top 的内部命令对进程的显示方式进行控制

mpstat指令:是实时系统监控工具,其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

你是否遇到过系统CPU整体利用率不高,而应用缓慢的现象?

本文分享自微信公众号 - 只喝牛奶的杀手(killerhub),作者:只喝牛奶的杀手

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 开发应该知道的Linux系统分析

    一谈到Linux系统分析,大多数开发觉得不了解也没有关系,但是了解了可以帮你走的更远。从开发的角度了解CPU,MEMORY,IO,NETWORK。在日常工作中我...

    只喝牛奶的杀手
  • mybatis中#{}和${}的区别

    mapper中使用#{}格式的语法在mybatis中使用Preparement语句来安全的设置值

    只喝牛奶的杀手
  • MySQL查询成本

    CPU、内存、磁盘IO、网络作为性能优化的四大天王,但MySQL中一条查询语句的执行成本是由磁盘IO和CPU成本决定的:

    只喝牛奶的杀手
  • 进程运行于不同的 CPU 核

    用 Gearman 搭建 Map/Reduce ,GearmanManager 来管理所有的 workers。启动多个 gearman-manager dae...

    小小科
  • Linux系统下CPU使用(load average)梳理

    在平时的运维工作中,当一台服务器的性能出现问题时,通常会去看当前的CPU使用情况,尤其是看下CPU的负载情况(load average)。对一般的系统来说,根据...

    洗尽了浮华
  • [linux][kernel]meltdown攻击和retpoline防御分析

    前言: Intel爆出来的漏洞,搞了一个大新闻,然后Linus也对Intel的补丁批判了一番。 关于meltdown攻击的原理,以及retpoline防御,见下...

    皮振伟
  • Meltdown 简简述

    近日现代 CPU 的 Meltdown & Spectre 漏洞沸沸扬扬,最早是 Google 研究员发现可以通过内存侧信道时序攻击来获取隐私数据,后续 Chr...

    王下邀月熊
  • 一分钟搞懂云计算和大数据对人到底有啥用?

    都2019年了,大数据和云计算居然还有人不知道到底是干啥的,今天马小哥就来个大家讲一下云计算和大数据是做什么的,保证你能会!

    马小哥
  • 101-Hyper-V 虚拟CPU分配探讨.docx

    我该为我的物理服务器分配多少虚拟CPU给虚机才合理,分配比1:1,2:1,听说还可以到8:1?

    盆盆
  • SMP之Affinity

    CPU Affinity一般翻译为CPU的亲和力或亲和性,是多核OS里的一种技术,指的是可以将任务绑定到某个CPU上。在VxWorks的SMP里,默认每个任务都...

    Taishan3721

扫码关注云+社区

领取腾讯云代金券