前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发应该知道的Linux系统分析-CPU篇

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

作者头像
只喝牛奶的杀手
发布2019-12-24 16:16:07
8080
发布2019-12-24 16:16:07
举报

为什么服务器的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整体利用率不高,而应用缓慢的现象?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 只喝牛奶的杀手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
应用性能监控
应用性能监控(Application Performance Management,APM)是一款应用性能管理平台,基于实时多语言应用探针全量采集技术,为您提供分布式性能分析和故障自检能力。APM 协助您在复杂的业务系统里快速定位性能问题,降低 MTTR(平均故障恢复时间),实时了解并追踪应用性能,提升用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档