暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何诊断OS中的CPU资源(1)

白鳝的洞穴 2020-05-14
493
CPU是一种计算资源,现在我们使用的大多数服务器都是使用SMP架构。一台服务器上可以有多个CPU板,我们称之为路数,我们讲的2路服务器就是有两颗CPU的服务器。一颗CPU里可以有多个CPU核心,我们称之为CORE,每个核心又可能支持多线程,比如INTEL X86都是双线程的,小型机上有2/4/8线程的CPU。每个CPU线程都是可以独立运行某个进程或者线程的。所以说CPU的总线程数越多,那么这台服务器能够并行执行的进程/线程数也就越多。
其实分析CPU使用情况对于我们诊断与定位问题十分关键。不过关于CPU的事情,说上几天都说不完,因此老白决定从今天开始,分几期来和大家一起讨论一下如何对CPU资源进行诊断与分析。
CPU资源是服务器资源中最为重要的部分,也是很难扩展的部分,因此,在我们做运维的时候,经常需要去分析CPU是否存在资源瓶颈。我们该如何去诊断CPU的资源瓶颈或者CPU的使用情况呢?首先我们需要了解下,我们如何来看CPU的工作状态:
  • 工作时间:计算机科班出身的应该学习操作系统的时候都学过PV操作,一个系统中有几个WORKER,这样任务发放者发放的任务就会放到一个队列中,由WORKER从队列中取出任务去完成。我们可以把CPU也看成一个WORKER,维护着一个可运行队列(RUNABLE QUEUE),当这个CPU核或者线程上有任务在运行时,我们称CPU处于工作状态,CPU处于工作状态的时间我们称为工作时间

  • 中断时间(Interrupt ):CPU需要根据调度器的指示来运行特定的任务,因此CPU和进程调度器之间需要协调,进程调度器告诉CPU到底运行哪个进程,什么时候停止运行等待其它资源,进程由运行状态切换到等待状态花费的时间就是中断时间。中断优先级分为多种,各种级别的中断的优先级顺序如下:硬件中断>内核中断>用户中断

  • 上下文切换时间(context switch):为了防止一个任务占用过多的CPU资源,导致其他任务无法获得CPU资源,OS规定了一个CPU一次可以使用的CPU的最大时长,也就是CPU时间片(UNIX系统的缺省时间片是10毫秒,一个cs),如果A进程运行时间已经到了时间片的最大时长,现在CPU需要切换到B进程,由A进程切换到B进程花费的时间就是上下文切换时间

下面我们要说的是CPU的使用率。CPU的使用率是我们十分关注的问题,大多数运维人员,特别是DBA都能够并且只能够从CPU的使用率来分析CPU资源的情况。KAO,cpu使用率都90%,系统要出问题了,赶紧杀几个会话。这是广大DBA最本能的反应,不过如果我们只会这一招,是完全不够的。
实际上,CPU作为一种资源,就是拿来给人用的,如果一台服务器中的CPU资源总是处于20%左右的使用率,那么我们买的其他80%CPU是干嘛用的?偶尔出现高的CPU使用率并不是洪水猛兽,如果CPU使用率长期处于十分高的高位,那才存在当业务负载更高的时候CPU资源可能存在不足的问题。
另外一点,通过CPU使用率来判断系统的CPU资源风险是不够准确的。在近些年,另外一个指标被运维人员更为看重,就是系统的负载(load)

通过uptime命令和/proc/loadavg文件我们都可以看到当前系统的负载平均值,这三个值分别是最近1分钟,最近5分钟和最近15分钟的负载情况。那么负载情况是如何计算的呢?UNIX/LINUX中,当前正在CPU中运行和等待CPU运行的任务都会被标识为r(runable),这些被标识为r的任务的总数就是Load。我们通过vmstat可以看到r的当前情况:

一般来说r的值越高,CPU的使用率也会越高。不过在某些特定场景中,CPU使用率高到一定程度,随着R值的增加,CPU使用率的变化就不大了。因此,在高负载的情况下,我们不能仅仅看CPU使用率的高低,更要关注r队列的深度。通过r的指标与CPU线程数进行比较,我们可以看到CPU资源争用的更为准确的数据。比如我们是一台2路服务器,每个CPU是12核双线程的,那么我们就有48个CPU线程可以用于执行独立的任务。如果系统中的r队列的深度不超过48,那么CPU资源的竞争就基本上不存在。如果超过了48,那么就会有任务无法马上分配到CPU资源,也就是说CPU资源可能会出现一定的争用。
最后修改时间:2020-05-15 08:15:21
文章转载自白鳝的洞穴,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论